2013-04-04 1 views
0

Для моего требования, я создаю один временную таблицу, как показано ниже:ALTER TABLE Чтобы добавить несколько столбцов с переменной строкой

CREATE TABLE #ResourceMonthlyTimeReport 
(
    RowId INT IDENTITY(1,1), 
    ResourceID UNIQUEIDENTIFIER, 
    TaskId UNIQUEIDENTIFIER, 
    ProjectId UNIQUEIDENTIFIER, 
    -- Some column names containing date should come here. 
) 

В приведенной выше таблице, дата столбцы должны отображаться, как показано ниже:

[01 Mar, 2013] NVARCHAR(10), 
[02 Mar, 2013] NVARCHAR(10), 
[03 Mar, 2013] NVARCHAR(10), 

... и количество столбцов зависит от значений параметров @FromDate и @ToDate

Я написал функцию dbo.F_ST_DaysColumns(@FromDate, @ToDate), что ge nerates следующего вывода в виде строки:

[01 Mar, 2013] NVARCHAR(10), 
[02 Mar, 2013] NVARCHAR(10), 
[03 Mar, 2013] NVARCHAR(10) 

Теперь, я не понимая, как добавить этот результат к указанной выше временной таблице #ResourceMonthlyTimeReport.

я сделал что-то вроде этого:

DECLARE @DateColumns AS VARCHAR(MAX) 
SET @DateColumns = dbo.F_ST_DaysColumns(@FromDate, @ToDate) 

ALTER TABLE #ResourceMonthlyTimeReport ADD @DateColumns 

Но, показывая ошибка, как показано ниже:

Msg 102, Level 15, State 1, процедура ST_Proc_Rpt_MonthlyTimeReportSummary, строка 94
Неправильный синтаксис около '@DateColumns'

ответ

1

Ох ... это слишком просто, но я не мог думать так, как этот bef Я опубликовал этот вопрос на форуме. Во всяком случае, кто-то другой может использовать его:

EXEC('ALTER TABLE #ResourceMonthlyTimeReport ADD ' + @DateColumns) 
0

Таблица переменных, как временной таблицы, созданной в памяти, которая может быть использована в пределах объема, где она создается. После его создания невозможно изменить структуру переменной таблицы с помощью инструкции ALTER TABLE. Лучше добавить еще один столбец в декларации и использовать его, когда захотите. Обратите внимание, что в табличных переменных могут быть столбцы, которые также принимают значения NULL.

Смежные вопросы