好的,这可能很简单,但我找不到解决方案。 我开始使用T-SQL中的游标,并且正在玩它们。
但是如果我通过Execute-Button在Management Studio中执行它们,我就不会得到我的结果。我得到的只是“命令执行成功”。
如果我调试它我会得到结果,下次我点击执行时我也会得到结果......
有某种缓存吗?或者我做错了吗?
脚本看起来像这样:
declare @po varchar(20), @prod varchar(50), @qty integer, @type varchar(20)
declare db_cursor cursor for
select product, po, qty, space(1) as btype from header
for read only
open db_cursor
while @@FETCH_STATUS=0
begin
fetch db_cursor into @po, @prod, @qty, @type
if @qty<1000
set @type = 'small'
else
set @type = 'large'
print @type
end
close db_cursor
deallocate db_cursor
PS:自然我在打印前使用了select,同样的问题。
答案 0 :(得分:2)
啊,我明白你的意思了。在第一次运行下面的脚本时,它会产生结果。在随后的情况下没有任何反应(除非您尝试在新的SSMS窗口中)。
declare @po varchar(20), @prod varchar(50), @qty integer, @type varchar(20)
declare db_cursor cursor for
select name, name, number, space(1) as btype from master..spt_values
for read only
open db_cursor
while @@FETCH_STATUS=0
begin
print 'y'
fetch db_cursor into @po, @prod, @qty, @type
if @qty<1000
set @type = 'small'
else
set @type = 'large'
print @type
end
close db_cursor
deallocate db_cursor
问题是如何检查@@FETCH_STATUS
值。这是从新连接中的0
开始,但您的脚本会将其保留在-1
。
你需要Fetch
循环前的第一行。有关正常模式,请参阅this blog post。
答案 1 :(得分:1)
如果可以,请尝试切换标签:
听起来好像你在消息标签上
修改强>
另外,在看了更多之后,您是在选择光标数据还是整个脚本?我问,因为看起来你只是设置变量而不是用它们做任何事情(当然除print
之外)。
答案 2 :(得分:0)
使用查看结果作为文本选项