2012-02-18 1 views
0

Я просто хочу создать таблицу и столбец, следующие за моей функцией, которые возвращают тип данных nvarchar. Как я могу создать подобное? Pls увидеть код ниже:Могу ли я создать имя таблицы и столбца после параметра?

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 является функцией, которая вернется название месяца в год.

+0

Почему бы вам не использовать переменную таблицы (при условии, что SQL Server 2005+) или временную таблицу? Кроме того, что тип данных, возвращаемый функцией, не соответствует столбцу ... –

+0

Я просто создаю функцию для нескольких целей. – Makara

ответ

0

Использование динамического 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