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 /*删除游标*/