TSQL динамическое добавление столбцов в хранимой процедуре - PullRequest
3 голосов
/ 05 июня 2009

Привет! Я пишу большую хранимую процедуру, которая создает динамическую таблицу отчетов размером 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

Я получаю синтаксические ошибки с этим в @columnname в инструкции ALTER TABLE приведенного выше кода.

Кроме того, поскольку я новичок в этом, я не уверен, является ли это лучшим способом сделать это, или есть ли в TSQL лучшие способы для генерации требуемой динамической таблицы.

Ответы [ 3 ]

13 голосов
/ 05 июня 2009

Попробуйте это:

объявляют @sql nvarchar (100)

set @sql = 'отчеты ALTER TABLE ADD' + @ columnname + 'VARCHAR (50) NULL'

exec sp_executesql @ sql

3 голосов
/ 03 ноября 2010

Попробуйте

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 голосов
/ 05 июня 2009

Не могу обойтись без необходимости делать это динамически. Я полагаю, поэтому измените свой блок BEGIN на что-то вроде этого:

DECLARE @sql VARCHAR(8000)

BEGIN      
    SET @sql = 'ALTER TABLE Table_1 ADD '+@columnname+' VARCHAR(50) NULL'    
    EXEC(@sql)        
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...