问题: 代码读取每一行,并确定它是否为空。 如果列为null,我想打印出“works”。否则,它不应该做任何事情。 现在它不起作用。它给了我一个错误,该列不存在。(在if语句中提到的那个)
这是代码。 代码:
DECLARE Employee_Cursor CURSOR FOR
SELECT [Description]
FROM tblSubViews ts
INNER JOIN tblViewSubViewJoin tvs
ON ts.SubViewId = tvs.SubViewId Where tvs.ViewId = 4
OPEN Employee_Cursor
FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
if (Description = null)
begin
print 'works'
end
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor
答案 0 :(得分:3)
NULL
是SQL中的一个特殊值 - 实际上,它是值的缺席。
因此,由于它不是一个值,您无法与常规方法进行比较 - 您需要使用IS NULL
或IS NOT NULL
方法:
if (Description IS NULL)
begin
print 'works'
end
与IS NULL
或IS NOT NULL
比较,可以获得您正在寻找的结果。
答案 1 :(得分:2)
您无法使用等号与NULL
进行比较,您可以使用ID (Description IS NULL)
使用游标时,还需要选择变量:
FETCH NEXT FROM Employee_Cursor INTO @Description
WHILE @@FETCH_STATUS = 0
您当然需要声明@Description是适合该列的类型,
答案 2 :(得分:2)
在这种情况下不需要光标
SELECT
[Description],
ISNULL([Description] ,'Works') AS text
FROM tblSubViews ts
INNER JOIN
tblViewSubViewJoin tvs
ON
ts.SubViewId = tvs.SubViewId
Where
tvs.ViewId = 4
然后你可以通过在WHERE子句中添加一个只选择空描述列的额外条件来缩短它吗?
答案 3 :(得分:0)
根据您的逻辑,在查询中使用isnull()
功能。