我有以下代码不起作用。我想要做的是基于一些变量我必须检查该变量的所有位字段是否为真。如果是,则返回true,否则返回false。
有什么建议吗?
DECLARE @var NVARCHAR(20); IF EXISTS (SELECT variable FROM Table1 WHERE IDNO=@IDNO) BEGIN SELECT @var=variable FROM Table1 WHERE IDNO=@IDNO SELECT CASE @var WHEN 1 THEN IF EXISTS(SELECT CheckFlag FROM Table2 INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO) RETURN 1 ELSE RETURN 0 WHEN 2 THEN ...... ELSE -1 END
提前谢谢。
答案 0 :(得分:1)
CASE WHEN
构造要求THEN
部分后跟expression。您无法在其中添加语句,such as IF
或RETURN
。
相反,你应该在那里放置一个表达式,这样当SELECT
语句对其进行评估并生成结果时,你可以使用那个值来执行更多语句,包括IF
或RETURN
。
所以你可以替换它:
SELECT CASE @var
WHEN 1 THEN
IF EXISTS(SELECT CheckFlag FROM Table2 INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO)
RETURN 1
ELSE
RETURN 0
使用RETURN
语句从SELECT
获取返回值,同时使用Count
和Sign
函数生成0或1值:
RETURN SELECT CASE @var
WHEN 1 THEN
(SELECT Sign(Count(*))
FROM Table2
INNER JOIN Table1
ON Table2.IDNO=Table1.IDNO
WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and Table1.IDNO=@IDNO)