2012-07-25 4 views
1

주어진 테이블에 대한 열 목록을 만들 수 있어야합니다. 나는 다음과 같은 실행하면 는 :sp_executesql이 값을 반환하지 않습니다.

DECLARE @ColList Varchar(Max) 
DECLARE @TabName varchar(100) = 'CT_CONF' 

SELECT @ColList = CASE WHEN @ColList IS NULL THEN '''' ELSE @ColList + ',' END + column_name 
        from INFORMATION_SCHEMA.COLUMNS 
        where TABLE_NAME = @TabName 
         and DATA_TYPE not in ('xml','Text','Image','Geometry','Geography') 
         and COLUMN_NAME not in ('LAST_MODIFIED') 
        order by ordinal_position     

select @ColList 

는 내가 필요로하는 출력을 얻을 내가 sp_executesql을 다음과 같이 실행하려고하면,하지만, 내가 다시 아무것도 얻을 수 없다.

DECLARE @TabName varchar(100) = 'CT_CONF' 

DECLARE @SQL NVarchar(Max) 
DECLARE @ColList Varchar(Max) 
Declare @Params nvarchar(Max) 

SET @SQL = N' 
      select @ColList = CASE WHEN @ColList IS NULL THEN '''' ELSE @ColList + '','' END + column_name 
        from INFORMATION_SCHEMA.COLUMNS 
        where TABLE_NAME = ''@TabName '' 
         and DATA_TYPE not in (''xml'',''Text'',''Image'',''Geometry'',''Geography'') 
         and COLUMN_NAME not in (''LAST_MODIFIED'') 
        order by ordinal_position 
      ' 

set @Params = N'@ColList varchar(Max) OUTPUT' 

EXEC sp_executesql @SQL, @Params, @ColList OUTPUT 

select @ColList 

내가 뭘 잘못하고 있니?

감사합니다, 유진

+1

'@ SourceTable'이라는 테이블이 있습니까? –

+0

내 잘못으로 @TabName을 읽어야합니다. 나는 변화를 만들었다. 여전히 작동하지 않습니다. – user1549571

+0

테이블 이름을 동적 쿼리에 연결하거나 매개 변수로 전달해야합니다. 'CT_CONF'를 찾아야 할 때'@ TabName'이라는 테이블을 찾고 있습니다. –

답변

2

시도하십시오 (아마도 더 나은)

'... 
    where TABLE_NAME = ''' + @TabName + ''' 
...' 

또는 :

'... 
     where TABLE_NAME = @TabName 
...' 
set @Params = N'@TabName varchar(100), @ColList varchar(Max) OUTPUT' 

EXEC sp_executesql @SQL, @Params, @TabName, @ColList OUTPUT 

이 정말 코멘트에 @Mikael 에릭손 감독의 제안의 단지 구현입니다.

+0

고맙다. – user1549571

관련 문제