Sql server TSQL在存储过程中动态添加列

Sql server TSQL在存储过程中动态添加列,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,您好,我正在编写一个大型存储过程,它创建一个动态报表表,大小为n列,前6列是常量,其余的取决于传递给该过程的几个参数,以创建包含所需列的表 我遇到的问题是以下TSQL DECLARE @columnname VARCHAR(50) SET @columnname = 'on_' + @description IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports') AND NAME = @colu

您好,我正在编写一个大型存储过程,它创建一个动态报表表,大小为n列,前6列是常量,其余的取决于传递给该过程的几个参数,以创建包含所需列的表

我遇到的问题是以下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中是否有更好的方法来生成所需的动态表。

尝试以下方法:

声明@sql nvarchar(100)

set@sql='ALTER TABLE reports ADD'+@columnname+'VARCHAR(50)NULL'

exec sp_executesql@sql


我认为,无法避免动态执行,因此请将“开始”块更改为以下内容:

DECLARE @sql VARCHAR(8000)

BEGIN      
    SET @sql = 'ALTER TABLE Table_1 ADD '+@columnname+' VARCHAR(50) NULL'    
    EXEC(@sql)        
END
试一试

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