ALTER TABLE使用字符串变量添加多个列

时间:2013-04-04 04:37:10

标签: sql-server-2008 sql-server-2012

根据我的要求,我正在创建一个临时表,如下所示:

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),它以字符串生成以下输出:

[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,Procedure ST_Proc_Rpt_MonthlyTimeReportSummary,Line 94
  '@DateColumns'附近的语法不正确

2 个答案:

答案 0 :(得分:1)

哦......太简单了,但在我在论坛上发布这个问题之前,我想不出这样的想法。无论如何,其他人可以使用它:

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

答案 1 :(得分:0)

表变量就像在内存中创建的临时表,可以在创建它的范围内使用。创建后,无法使用ALTER TABLE语句更改表变量的结构。最好在声明中添加另一列,并在需要时使用它。请注意,表变量可以包含也接受NULL值的列。