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

问题描述:

对于我的要求,我创建了一个临时表象下面这样: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 

但是,示值误差象下面这样:

消息102,级别15,状态1,过程ST_Proc_Rpt_MonthlyTimeReportSummary,行94
附近有语法错误'@DateColumns'

唉......这太简单了,但我不能这样想。矿石我在论坛上发布了这个问题。无论如何,别人可以使用它:

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

表变量是像在可以在正在创建它的范围内使用的存储器中创建的临时表。一旦创建,就不可能通过使用ALTER TABLE语句来改变表变量的结构。最好在声明中添加另一列,并在需要时使用它。请注意,表变量可以包含也接受NULL值的列。