您好我正在编写一个大型存储过程,它创建一个动态报表,大小为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是否有更好的方法来生成所需的动态表。
答案 0 :(得分:13)
试试这个:
声明@sql nvarchar(100)
设置@sql ='ALTER TABLE报告ADD'+ @ columnname +'VARCHAR(50)NULL'
exec sp_executesql @sql
答案 1 :(得分: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
答案 2 :(得分:2)
无法动态地动作我相信所以将你的BEGIN块更改为:
DECLARE @sql VARCHAR(8000)
BEGIN
SET @sql = 'ALTER TABLE Table_1 ADD '+@columnname+' VARCHAR(50) NULL'
EXEC(@sql)
END