Sybase 在很多语法上面和常用的MS Sql 还有 PL Sql 存在很多不同的差异, 经常弄的我头昏脑涨。?
这两天有个需求:几十个 tbName_xx 这种形式是表需要数据更新, 参照 MS Sql 的帮助文档和网上资料自己写了个cursor。结果是非常的郁闷!?
后来几经摸索和别人的指点,弄了一个能正确执行的, 把代码贴出来供大家参考
- --第一步
- DECLARE?cursor_a?CURSOR?/*声明游标*/??
- FOR???
- SELECT?sDomainCode???
- ???FROM?tbOsDomain???
- ???WHERE?sDomainCode?NOT?IN?('CN', 'EN', 'US', ...)??
- ORDER BY sDomainCode??
- --第二步 ?
- OPEN?cursor_a ?/*打开游标*/?
- ?
- DECLARE?@domainCode?VARCHAR(11),?@message?VARCHAR(80), @dynaSql VARCHAR(1000)???
- FETCH?cursor_a???
- INTO?@domainCode ?--提取游标数据
- ??
- WHILE?@@sqlstatus?=?0???
- ???BEGIN ?
- ??????SELECT?@message?=?"----- domainCode is :?"?+?@domainCode???
- ??????PRINT?@message
- ?? ? ?SET @dynaSql = " UPDATE tbTestData SET testCell='value_" + @domainCode
- ?? ? ?EXEC(@dynaSql) --执行动态SQL, Sybase 12 以上的版本支持使用动态SQL
- ??????--to?do?something.....??
- ??
- ??????--?Get?the?next?cur.??
- ??????FETCH?cursor_a???
- ??????INTO?@domainCode???
- ???END??
- CLOSE?cursor_a?
- --第三步?
- DEALLOCATE?CURSOR?cursor_a ?/*删除游标*/ ?
?
?
1 楼 icefishc 2010-02-26
Sybase和MS sqlserver 用的都是T-SQL。 语法基本一样。
2 楼 lobbychmd 2010-02-26
跟 sql server差不多,我记得就1个状态码不同
3 楼 yose 2010-03-01
是啊,但是我就是对细节处不了解哦,,,就绕弯子了