2012-02-18 2 views
0

그냥 테이블 및 열을 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

왜 테이블 변수 (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 
관련 문제