我正在嘗試創建一個過程,其中條件語句根據用戶輸入的值進行更改。下面是我想要實現的簡化示例。如何在條件語句中調用變量(即值列表)?
Create Procedure [LossRatioReport] (@construction AS VARCHAR(2), @state AS VARCHAR(2)) AS
DECLARE @construction_condition AS NVARCHAR(MAX)
DECLARE @construction AS VARCHAR(2)
SET @construction = '01'
SET @construction_condition = CASE @construction WHEN '01'
THEN @construction_condition = '('01', 'Frame Construction', 'Frame')'
ELSE @construction_condition = '00'
END
BEGIN
SELECT year, SUM(loss)
FROM Database_1
WHERE id IN (SELECT DISTINCT id FROM Database_2 WHERE construction = @construction_condition)
END
GO
我想這樣做這種方式,因爲有整數和字符串每種類型的列表,我不想一遍又一遍地重寫代碼爲每個條件。但是當我嘗試運行我的代碼時,我不斷收到WHERE語句中變量的錯誤語法消息。
你不能這樣做,就像你正在嘗試。有一件事你在你的案例表達式中遍佈着無效的字符串。要做到這一點,你需要動態的SQL。我會非常不願意這樣做,因爲你需要參數化你的動態sql,因爲這是來自一個參數。似乎最好的方法是重新考慮這一點。 – 2014-11-24 19:23:57
您可以創建一個只存儲ID的臨時表。根據條件,使用您感興趣的ID填充臨時表,並在其中添加「where id in(從#tmp選擇[ID])」 – Jeremy 2014-11-24 19:44:55