1

嗨,我的程序有问题

存储过程:

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id IS IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1

错误: IN-Keyword 附近的语法错误 THEN-Keyword 附近的错误语法

我用谷歌搜索,但我没有找到一个带有 IN 运算符的案例的例子,有人可以告诉我有什么问题吗

任何意见是极大的赞赏

4

2 回答 2

2

只需删除IS它就会起作用(这只是为了直接回答您的问题,而不是别的(例如性能改进)

SELECT dbo.Table1.*,
       CAST (CASE WHEN Table1.Id  IN ( SELECT Id 
                                         FROM dbo.Table2 
                                         WHERE RefRolleId =@Id) 
              THEN 0 ELSE 1 END AS bit) AS selected
FROM   dbo.Table1
于 2013-01-22T14:15:31.640 回答
2

@JW 是正确的,但我建议更改您的查询,例如:

SELECT DISTINCT T.*,
       CAST (CASE 
                WHEN T2.Id IS NOT NULL
                THEN 0 
                ELSE 1 
             END AS bit) AS selected
FROM   dbo.Table1 T
   LEFT JOIN dbo.Table2 T2 ON T.Id = T2.Id AND T2.RefRolleId =@Id

我认为这可能会产生更好的性能。

祝你好运。

于 2013-01-22T14:19:25.283 回答