+ -
当前位置:首页 → 问答吧 → sybase 的 SQL 语法问题-----exist的困惑

sybase 的 SQL 语法问题-----exist的困惑

时间:2010-12-09

来源:互联网

本希望在SHELL中实现如果库mydb中有表table1时就作update 操作,

isql -Uuser -P123 <<!!
use   mydb
go

if ( exists ( select 1 from sysobjects where type='U' and name='table1' ) )
begin
        print  "开始测试"
        update table1 set seg1="123"
end
go

!!

测试结果遇到如下情况,不甚了解:
1: 如果 table1 确实存在,执行正常
2: 如果 table1 不存在,该语句根本无法执行(直接报 table1 不存在)
初步分析,是 SYBASE 先作了解析因此,无法执行
但是如果把 update 换成 drop 语句,不管table1是否存在,语句均执行正常,也就推翻了自己的分析

if ( exists ( select 1 from sysobjects where type='U' and name='table1' ) )
begin
        print  "开始测试"
        drop  table table1
end
go

求解?

作者: luopc   发布时间: 2010-12-09

if ( exists ( select 1 from sysobjects where type='U' and name='table1' ) )
begin
        print  "开始测试"
        declare @cmdstr varchar(100)
        select @cmdstr='update table1 set seg1="123"'
        execute(@cmdstr)
end
go

作者: Eisen   发布时间: 2010-12-10

asa15.5中有个选项:Deferred Name Resolution
对这个情况比较实用~

作者: andkylee   发布时间: 2010-12-10



QUOTE:
asa15.5中有个选项:Deferred Name Resolution
对这个情况比较实用~
andkylee 发表于 2010-12-10 09:39




    哈,这个feature是个西班牙人写的

作者: shakeone   发布时间: 2010-12-10