2011-08-16 37 views
4

我有一個報警觸發器,如果​​該報警觸發= 1,我希望另一列的值爲NULL。舉例來說,我將創建一個簡單的表格來說明我想要解釋的內容。SQL插入(選擇)使用基於另一列值的CASE

DECLARE @tmp TABLE (ID INT, Value1 FLOAT, V1_Alarm BIT, Value2 FLOAT, V2_Alarm BIT) 
INSERT INTO @tmp 
SELECT (
ID, 
CASE WHEN V1_Alarm = 1 THEN NULL ELSE Value1, 
V1_Alarm, 
CASE WHEN V2_Alarm = 1 THEN NULL ELSE Value2 
) FROM SomeTable 
+1

什麼不工作?如果刪除括號,添加別名並在你的CASE語句中添加'END',你應該有什麼工作。 – JNK

回答

6

你沒有正確地結束你的病例陳述。而且,括號是不必要的,並且防止傳遞多個值。以下是您的示例代碼修改:

DECLARE @tmp TABLE (ID INT, Value1 FLOAT, V1_Alarm BIT, Value2 FLOAT, V2_Alarm BIT) 
INSERT INTO @tmp 
SELECT ID, 
     CASE WHEN V1_Alarm = 1 THEN 
      NULL 
     ELSE 
      Value1 
     END, 
     V1_Alarm, 
     CASE WHEN V2_Alarm = 1 THEN 
      NULL 
     ELSE 
      Value2 
     END 
FROM SomeTable  
+1

你還應該提到你刪除了括號以允許多個值通過 – JNK

+0

@JNK,好點 - 更新。 –

+0

你必須提供V2_Alarm值以及成功插入到@tmp,因爲它沒有聲明默認值 – sll