2009-06-05 91 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