如果Cursor返回0位,如何赋值变量

时间:2015-06-19 18:32:57

标签: tsql cursor

我写了一个光标来搜索查看一个比特值的表格。 如果所有值均为1,则发送电子邮件。但如果任何一行中的一个值为0,我就不会发送电子邮件。我遇到的问题出现在我的If语句中。在SSMS中,“@ isComplete = 0”正在破坏,只有“语法不正确”错误。我不确定我在这里缺少什么。我的代码如下。谢谢。

if($(window).scrollTop() + $(window).height() < ($(document).height() - $(selector).outerHeight())) {
    $(selector).addClass("stickybottom");;
}
else {
    $(selector).removeClass("stickybottom");
}

2 个答案:

答案 0 :(得分:1)

语法错误是由于在行上没有语句而导致的。您需要使用SET或SELECT为变量赋值,例如set @isComplete = 0

为什么祈祷告诉游标而不是简单的EXISTS查询?一个更有效的解决方案是:

select @isComplete = case
  when exists ( select 42 from #AAEAPVS where Complete = 0 ) then 0
  else 1 end;

提示:使用适当的软件(MySQL,Oracle,DB2,...)和版本标记数据库问题是有帮助的,例如: SQL服务器2014。语法和功能的差异通常会影响答案。

答案 1 :(得分:1)

错误的语法是您需要使用SET来分配变量值,因此请更改

@isComplete = 0

SET @isComplete = 0

假设您想在找到不完整的内容后立即退出,则应将WHILE条件更改为

WHILE @@FETCH_STATUS = 0 AND @isComplete = 1

但最重要的是,您可能根本不需要使用游标 - 如果可能,您应该避免使用SQL中的游标。你可能只是做这样的事情

DECLARE @isComplete Bit = 1
IF EXISTS (SELECT * FROM #AAEAPVS WHERE Complete = 0)
BEGIN
    SET @isComplete = 0
END

即使这比你需要的还多,你可以在一个声明中做到这一点

DECLARE @isComplete Bit = 1
SELECT @isComplete = 0 FROM #AAEAPVS WHERE Complete = 0