Sql server 我可以在参数后面创建表和列名吗?

Sql server 我可以在参数后面创建表和列名吗?,sql-server,tsql,Sql Server,Tsql,我只想在my函数后面创建一个返回nvarchar数据类型的表和列,我怎么能这样创建呢?请参见下面的代码: IF @mode = 3 CREATE TABLE TMP( TMPID INT, [NAMES] NVARCHAR(50), [dbo.GetMonthNameOfDate(@date)] MONEY, [dbo.GetMonthNameOfDate(DATEADD(M,1,@

我只想在my函数后面创建一个返回nvarchar数据类型的表和列,我怎么能这样创建呢?请参见下面的代码:

IF @mode = 3 
        CREATE TABLE TMP(
            TMPID INT,
            [NAMES] NVARCHAR(50),
            [dbo.GetMonthNameOfDate(@date)] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,1,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,2,@date))] MONEY
        )
    ELSE
        CREATE TABLE TMP(
            TMPID INT,
            [dbo.GetMonthNameOfDate(@date)] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,1,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,2,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,3,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,4,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,5,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,6,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,7,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,8,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,9,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,10,@date))] MONEY,
            [dbo.GetMonthNameOfDate(DATEADD(M,11,@date))] MONEY
        )
GetMonthNameOfDate是一个函数,返回一年中月份的名称。

使用动态sql

DECLARE @sql varchar(2000)
IF @mode = 3 
    set @sql = '
    CREATE TABLE TMP(
        TMPID INT,
        [NAMES] NVARCHAR(50),
        [' + dbo.GetMonthNameOfDate(@date) + '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,1,@date))'] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,2,@date))'] MONEY
    )'
ELSE
    set @sql = '
    CREATE TABLE TMP(
        TMPID INT,
        [' + dbo.GetMonthNameOfDate(@date)+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,1,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,2,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,3,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,4,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,5,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,6,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,7,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,8,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,9,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,10,@date))+ '] MONEY,
        [' + dbo.GetMonthNameOfDate(DATEADD(M,11,@date))+ '] MONEY
    )'

exec sp_executesql @sql

为什么不使用表变量(假设为SQL Server 2005+)或临时表?除此之外,函数返回的数据类型似乎与列不匹配……我只是为了多用途而创建函数。。