2016-09-15 79 views
1

這是我想要實現的示例代碼,我想向包含特定代碼變量的表添加一列。但是,我無法真正瞭解sp_executesql如何傳遞它。任何幫助表示讚賞sp_executesql:使用case語句添加列

DECLARE @SQLQUERY NVARCHAR (max) 
DECLARE @Table VARCHAR (200) = 'Table_Name' 
DECLARE @Column VARCHAR (200) = 'Column_Name' 

DECLARE @Code1 int = 1 
DECLARE @Code2 int = 2 
DECLARE @Code3 int = 3 

SET @SQLQUERY = 'ALTER TABLE' + @Table + 'ADD' @Column 
AS CASE WHEN FirstColumn IS NULL THEN @Code1 
     WHEN SecondColumn IS NULL THEN @Code2 
    ELSE @Code3 

Exec sp_executesql @SQLQUERY 
+0

究竟是什麼你想實現什麼?將計算列添加到表中? – ZLK

回答

0

你需要建立alter聲明所有的字符串,然後執行它,例如您的查詢應該是這樣的:

SET @SQLQUERY = 'ALTER TABLE ' + @Table + ' ADD ' + @Column + 
' AS CASE WHEN FirstColumn IS NULL THEN ' + str(@Code1) + 
     ' WHEN SecondColumn IS NULL THEN ' + str(@Code2) + 
    ' ELSE ' + str(@Code3) + ' END' 

注:我用str(@Code1),因爲它被宣佈爲int

那麼你可以執行正常的語句

Exec sp_executesql @SQLQUERY 

希望這將幫助你

+0

嗨,現在它給了我錯誤未知對象類型'TABLEtable_nameADDColumn_Name'用於創建,刪除或更改語句。任何提示可能是什麼? – user3052850

+0

你應該把正確的表名稱,並且我將編輯答案以在_ADD_ – Monah

+0

之前通過添加適當的間距更新答案,但您需要使用存在的正確table_name – Monah

0

看看sp_executesql

你需要構建查詢爲String。

我注意到您的查詢幾個問題:

  • FirstColumn和當您要添加新列SecondColumn未聲明列
  • ,你需要指定列的數據類型。請參閱this

    ALTER TABLE Tablecolumn ALTER COLUMN NewColumn NVARCHAR(20)NOT NULL;

有關@ Code1,@ Code2和@ Code3的條件。你想要這個默認值?你想達到什麼目的?

+0

它將成爲計算列,這將取決於條件得到一個特定的代碼。代碼將是動態的,所以稍後會改變。不過,我只想讓第一部分先工作。 – user3052850

0

劇本終於據此制定本:

DECLARE @Code1 int = 1 
DECLARE @Code2 int = 2 
DECLARE @Code3 int = 3 
DECLARE @SQLQUERY NVARCHAR (max) 

SET @SQLQUERY = N'ALTER TABLE Table ADD Column 
AS CASE WHEN FirstColumn IS NULL THEN' STR(@Code1) + 
    'WHEN SecondColumn IS NULL THEN' STR(@Code2) + 
' ELSE' str(@Code3) + ' END' 

Exec sp_executesql @SQLQUERY