Могу ли я создать таблицу и имя столбца после параметра? - PullRequest
0 голосов
/ 18 февраля 2012

Я просто хочу создать таблицу и столбец, следующие за функцией 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 - это функция, которая возвращает имя месяца в году.

1 Ответ

0 голосов
/ 18 февраля 2012

Использовать динамический 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...