我写了一个光标来搜索查看一个比特值的表格。 如果所有值均为1,则发送电子邮件。但如果任何一行中的一个值为0,我就不会发送电子邮件。我遇到的问题出现在我的If语句中。在SSMS中,“@ isComplete = 0”正在破坏,只有“语法不正确”错误。我不确定我在这里缺少什么。我的代码如下。谢谢。
if($(window).scrollTop() + $(window).height() < ($(document).height() - $(selector).outerHeight())) {
$(selector).addClass("stickybottom");;
}
else {
$(selector).removeClass("stickybottom");
}
答案 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