2012-04-18 64 views
1

我想使用CASE語句來決定要更新哪個表...SQL CASE語句來選擇要更新哪個表

I.E.

IF (@existingStep = 1) 
BEGIN 
    UPDATE 
    CASE @tableToUpdate 
     WHEN 'TemplateActionSettings' THEN TemplateActionSetting SET blah blah blah 

    WHEN 'ETC' THEN --DO THIS ONE 

END 

CASE能以這種方式使用嗎?

+2

請標記使用的是 – 2012-04-18 14:34:04

+0

沒有什麼DBMS,'CASE'不是流控制的聲明就像是在一些語言(如Java) 。 'CASE'是一個返回單個標量值的表達式。 – 2012-04-18 15:10:06

回答

2

不,不幸的是CASE不能像這樣使用。

1

除非使用動態查詢(例如:字符串concat,後跟SQL Server風格的執行),否則不能在SQL中執行此操作。每個DML語句都必須標識它正在操作的對象(即表)。

1

你不能對這樣的多個表執行更新語句;除非您可以創建一個跨越所有表格的視圖,並且仍然可以使用更新。如果您可以創建該視圖,則可以使用案例更新並將數據恢復爲原始值(如果未更改)。如果不是,您將需要使用dynamic sql

+0

並非每個DBMS都具有可更新的視圖。 – 2012-04-18 14:38:07

2

不,您不能在直接的SQL語句中使用此案例。您將不得不使用過程語言來完成此操作。我假設你正在使用RDMS。

+0

謝謝大家......這將解釋爲什麼我無法弄清楚語法。雅,我使用TSQL和SSMS。 – 2012-04-18 14:40:38

4

你可以使用IF,而不是來得到類似的東西

IF @TableToUpdate = 'Table1' 
BEGIN 
UPDATE U SET Col = 'Val' FROM Table1 AS U WHERE something = something 
END 
ELSE IF @TableToUpdate = 'Table2' 
BEGIN 
UPDATE U SET Col1 = 'Val' FROM Table2 AS U WHERE something = something 
END 
+0

這正是我要使用的,但認爲如果我可以用CASE語句設置它,它會更容易閱讀(並節省空間)......謝謝! – 2012-04-18 15:03:35