2009-06-05 94 views
3

嗨我正在寫一個大的存儲過程,它創建了一個大小爲n列的動態報告表,前6個是常量,剩餘部分取決於傳遞給過程的幾個參數用所需的列創建表。TSQL在存儲過程中動態添加列

,我遇到的問題是與以下TSQL

DECLARE @columnname VARCHAR(50) 
SET @columnname = 'on_' + @description 

IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports') 
     AND NAME = @columnname) 
BEGIN 
     ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END 

我在上面的代碼中的ALTER TABLE語句@columnname越來越語法錯誤與此有關。

另外,因爲我對此很陌生,所以我不確定這是否是最好的方法,或者TSQL中有更好的方法來生成所需的動態表。

回答

13

嘗試這種情況:

申報@sql爲nvarchar(100)

組@sql = 'ALTER TABLE報告ADD '+ @ COLUMNNAME +' VARCHAR(50)NULL'

EXEC sp_executesql的@sql

2

無法避開必須動態地執行它我相信所以請將您的BEGIN塊更改爲如下所示:

DECLARE @sql VARCHAR(8000) 

BEGIN  
    SET @sql = 'ALTER TABLE Table_1 ADD '[email protected]+' VARCHAR(50) NULL'  
    EXEC(@sql)   
END 
3

嘗試

DECLARE @columnname VARCHAR(50) 
SET @columnname = '[on_' + @description +']' 
IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports')  
    AND NAME = @columnname) 
BEGIN  
ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END