我不知道为什么,但我知道怎么做!
你将表名的"#"去掉即可.DECLARE MyCursor CURSOR
FOR SELECT TOP 100 PERCENT Direction ,Debit,Credit,EndAmount,Flag
FROM tmpCross WHERE tmpcross.Flag=1 or tmpcross.Flag=0
order by voucherperiod,flag
FOR UPDATE
你将表名的"#"去掉即可.DECLARE MyCursor CURSOR
FOR SELECT TOP 100 PERCENT Direction ,Debit,Credit,EndAmount,Flag
FROM tmpCross WHERE tmpcross.Flag=1 or tmpcross.Flag=0
order by voucherperiod,flag
FOR UPDATE
使用一个定义在一个叫做物品代码库(wpdmk)上的游标,其中wpdmk有wpbm,wpmc,wpysbm等字段.
然后Select * into #wpdmk from wpdmk
运行两段只有细微差别的批处理,得到不同的结果:
1.报错,
2.正确.附:
1.
Declare @wpbm varchar(10)
Declare @wpmc varchar(20)
DECLARE MyCursor CURSOR
FOR SELECT wpbm,wpmc
FROM #wpdmk WHERE wplxbm='01' order by wpbm
FOR UPDATE
open MyCursor
fetch mycursor into @wpbm,@wpmc
while (@@fetch_status=0)
begin
If ltrim(rtrim(@wpbm))='0001'
update #wpdmk set wpysbm='01' WHERE CURRENT OF mycursor fetch mycursor into @wpbm,@wpmc
end
close MyCursor
deallocate MyCursor
会出现:
"服务器: 消息 16929,级别 16,状态 4,行 6
The cursor is READ ONLY."2.
Declare @wpbm varchar(10)
Declare @wpmc varchar(20)
DECLARE MyCursor CURSOR
FOR SELECT wpbm,wpmc
FROM wpdmk WHERE wplxbm='01' order by wpbm
FOR UPDATE
open MyCursor
fetch mycursor into @wpbm,@wpmc
while (@@fetch_status=0)
begin
--select @wpbm,@wpmc
If ltrim(rtrim(@wpbm))='0001'
update wpdmk set wpysbm='01' WHERE CURRENT OF mycursor fetch mycursor into @wpbm,@wpmc
end
close MyCursor
deallocate MyCursor结果:"(所影响的行数为 1 行)"我也等待着合理的解释.
sql server和oracle 都是这样。
此题无解,除非使用中间表。