2013-01-22 64 views
2

您好我有一個問題,我的過程CAST(CASE WHEN ID。在IS(SELECT REFID FROM表reftable WHERE REFID = someId)THEN 0 ELSE 1 END AS位

存儲過程:

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

錯誤: 錯誤的語法附近靠近IN-關鍵字 錯誤的語法THEN-關鍵字

我用Google搜索周圍,但我沒有發現對於IN運算符的情況的一個例子 可能有人請微啓我什麼是錯

任何意見是極大的讚賞

回答

3

只是刪除IS,它會工作(這只是直接回答你的問題,沒有別的(例如,性能改進)

SELECT dbo.Table1.*, 
     CAST (CASE WHEN Table1.Id IN (SELECT Id 
             FROM dbo.Table2 
             WHERE RefRolleId [email protected]) 
       THEN 0 ELSE 1 END AS bit) AS selected 
FROM dbo.Table1 
+0

傻我!,感謝 – WiiMaxx

+0

@WiiMaxx不客氣':D' –

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 [email protected] 

我認爲這可能會產生更好的性能。

祝你好運。

+0

我會檢查出來:) – WiiMaxx

相關問題