2014-07-25 19 views
0

我想寫一些SQl,它會根據傳入的參數的值來選擇要更新哪個表格我可以使用Case語句來決定更新哪個表格嗎?

下面是可能的嗎?

UPDATE CASE @param 
      WHEN '02' THEN dbo.Employer 
      WHEN '03' THEN dbo.Group 
      WHEN '04' THEN dbo.Sub_Group 
      WHEN '05' THEN dbo.Member 
      WHEN '07' THEN dbo.Claim 
      WHEN '08' THEN dbo.Contact 
     END 
     SET Status_PKID = 4 
     WHERE Request_PKID = 1 

我已經嘗試了一些沿着這條線,但我得到的case語句的語法錯誤。我想知道這是否僅僅是我正確編寫SQL的問題,還是我必須以一種非常不同的方式重寫整個事件(可能使用IF語句和每個表的單獨UPDATE)

回答

2

不,您可以不這樣做。

您可以使用動態SQL來實現類似的功能。

declare @sql nvarchar(1000) 

select @sql = 'UPDATE ' + CASE @param 
      WHEN '02' THEN 'dbo.Employer' 
      WHEN '03' THEN 'dbo.Group' 
      ... 
     END + ' SET Status_PKID = 4 WHERE Request_PKID = 1' 

,但它可能是一個壞主意

4

是的,你需要的IF語句

IF @param = '02' 
UPDATE dbo.Employer 
SET Status_PKID = 4 
WHERE Request_PKID = 1 

IF @param = '03' 
UPDATE dbo.Group 
SET Status_PKID = 4 
WHERE Request_PKID = 1 

IF @param = '04' 
UPDATE dbo.Sub_Group 
SET Status_PKID = 4 
WHERE Request_PKID = 1 

IF @param = '05' 
UPDATE dbo.Member 
SET Status_PKID = 4 
WHERE Request_PKID = 1 

IF @param = '07' 
UPDATE dbo.Claim 
SET Status_PKID = 4 
WHERE Request_PKID = 1 

IF @param = '08' 
UPDATE dbo.Contact 
SET Status_PKID = 4 
WHERE Request_PKID = 1 
+0

+1。 。 。這看起來像OP正在尋找的邏輯。 –

2

使用動態查詢

SET @table = (CASE @param 
      WHEN '02' THEN 'dbo.Employer' 
      WHEN '03' THEN 'dbo.Group' 
      WHEN '04' THEN 'dbo.Sub_Group' 
      WHEN '05' THEN 'dbo.Member' 
      WHEN '07' THEN 'dbo.Claim' 
      WHEN '08' THEN 'dbo.Contact' END) 

SET @SQL = 'UPDATE ' + @Table + ' SET Status_PKID = 4 WHERE Request_PKID = 1' 

EXEC (@SQL) 
2
DECLARE @SQL NVARCHAR(MAX); 

SET @SQL = N'UPDATE [dbo].' + CASE @param 
            WHEN '02' THEN QUOTENAME(Employer) 
            WHEN '03' THEN QUOTENAME(Group) 
            WHEN '04' THEN QUOTENAME(Sub_Group) 
            WHEN '05' THEN QUOTENAME(Member) 
            WHEN '07' THEN QUOTENAME(Claim) 
            WHEN '08' THEN QUOTENAME(Contact) 
            END 
     + N' SET Status_PKID = 4 
      WHERE Request_PKID = 1 ' 

EXECUTE sp_executesql @SQL 
相關問題