免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6466 | 回复: 11
打印 上一主题 下一主题

sybase 的 SQL 语法问题-----exist的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-09 22:59 |只看该作者 |倒序浏览
本希望在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

求解?

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
2 [报告]
发表于 2010-12-10 09:20 |只看该作者
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

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-12-10 09:39 |只看该作者
asa15.5中有个选项:Deferred Name Resolution
对这个情况比较实用~

论坛徽章:
0
4 [报告]
发表于 2010-12-10 11:52 |只看该作者
asa15.5中有个选项:Deferred Name Resolution
对这个情况比较实用~
andkylee 发表于 2010-12-10 09:39



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

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-12-10 13:59 |只看该作者
回复 4# shakeone


    我是在看Rob V的ppt的时候看到的。

论坛徽章:
0
6 [报告]
发表于 2010-12-10 14:43 |只看该作者
回复  shakeone


    我是在看Rob V的ppt的时候看到的。
andkylee 发表于 2010-12-10 13:59



    Rob V真是ase的外部代言人啊

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2010-12-10 15:02 |只看该作者
回复 6# shakeone


    现在他好像是sybase的员工了吧~

论坛徽章:
0
8 [报告]
发表于 2010-12-10 15:09 |只看该作者
回复  shakeone


    现在他好像是sybase的员工了吧~
andkylee 发表于 2010-12-10 15:02



    一直是吧,他的员工id比我小一倍,来了至少10年了应该,他人在荷兰。

论坛徽章:
0
9 [报告]
发表于 2010-12-10 20:12 |只看该作者
谢谢能提供解决方法!
但请问为什么 update  与 drop 会不一样?

论坛徽章:
0
10 [报告]
发表于 2010-12-10 20:28 |只看该作者
if ( exists ( select 1 from sysobjects where type='U' and name='table1' ) )
begin
        print  " ...
Eisen 发表于 2010-12-10 09:20



   
    SYBASE 11.0.3 下不支持这种方式,请问有通用的方法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP