2016-08-11 92 views
0

如何這個動態查詢轉換爲普通的SQL查詢如何這個動態查詢轉換爲普通的SQL查詢

SET @SQL = 'SELECT DelayId, DelayCategory, DelayReason FROM [TAMS].[DelayMaintenance] WHERE IsUtilized = 1 AND ' + @CHECKPOINTTYPE + ' = ' + CAST(1 AS CHAR(1)) + 
     ' union  SELECT 0, NULL, ''--- Pick One----'' ORDER BY DelayId' 

EXEC (@SQL) 
+0

這取決於'@ CHECKPOINTTYPE'的價值 - 它是一個標量值或列名? – RedFilter

+0

其列名 – user1030181

回答

1

假設有潛在列名的數量有限,你可以這樣做:

SELECT * 
from MyTable 
where CASE @CHECKPOINTTYPE 
    WHEN 'Column1' THEN Column1 
    WHEN 'Column2' THEN Column2 
    ELSE NULL 
    END = 1 

否則,您可以在傳遞到SQL Server之前使用服務器端語言構建查詢,這與您已經使用的解決方案几乎完全相同。

+0

你可以請更改我的查詢 – user1030181

+0

我想我的例子很清楚 - 不知道列名,不,我不能。 – RedFilter

+0

列名是'TRUCK','RAIL'和'BARGE' – user1030181

0

我已經試過這

SELECT DelayId, DelayCategory, DelayReason 
    FROM [TAMS].[DelayMaintenance] 
    WHERE CASE @CHECKPOINTTYPE 
     WHEN 'TRUCK' THEN Truck 
     WHEN 'RAIL' THEN RAIL 
     WHEN 'BARGE' THEN BARGE 
     ELSE NULL 
     END = 1 
     AND IsUtilized = 1 
    union  SELECT 0, NULL, '--- Pick One----' ORDER BY DelayId 
+0

看起來不錯。它工作嗎? – RedFilter

+0

Yeap。有用! – user1030181

相關問題