2016-10-25 1 views
0

을 간부 인 것이 아니라 내가 문제 EXEC (@SQL) 작업에 임시 테이블 (또는 테이블 변수)의 결과를 전달해야 :패스 테이블 변수 내가이 저장 프로 시저를 작성하는 것을 시도하고 SQL 서버

DECLARE @colsUnpivot AS NVARCHAR(MAX) 
    DECLARE @query AS NVARCHAR(MAX) 
    DECLARE @Table_Name as Varchar(200) 
    DECLARE @transaction_Table NVarchar(500) 

    SET @Table_Name = 'opd_scholar' 
    SET @transaction_Table = 'opd_scholar_transaction' 

    --DECLARE @TEMP TABLE(colsUnpivot varchar(max)) 
    CREATE TABLE #TEMP (colsUnpivot varchar(max)) 

    SELECT @colsUnpivot = 'SELECT 
    STUFF ((
      SELECT '', ''+ QUOTENAME(InTab.COLUMN_NAME) 
      FROM INFORMATION_SCHEMA.COLUMNS InTab 
      WHERE InTab.TABLE_NAME = OutTab.TABLE_NAME 
      ORDER BY InTab.ORDINAL_POSITION 
      FOR XML PATH(''''), TYPE 
      ).value(''.'',''VARCHAR(MAX)'' 
     ) , 1,1,SPACE(0)) 
    FROM INFORMATION_SCHEMA.COLUMNS OutTab 
    WHERE TABLE_NAME = '''+ @Table_Name +''' 
    GROUP BY OutTab.TABLE_NAME' 
    --INSERT INTO @TEMP (colsUnpivot) 
    INSERT INTO #TEMP (colsUnpivot) 
    EXEC(@colsUnpivot) 
    PRINT @colsUnpivot 
    --SELECT colsUnpivot FROM @TEMP 
    SELECT colsUnpivot FROM #TEMP 

    DECLARE @TEMP1 NVARCHAR(MAX) = 'SELECT colsUnpivot FROM #TEMP' 

    --PRINT @TEMP 

    SET @query 
    = 'INSERT INTO '+ @transaction_Table +' ( unitid,institution,city,state,zip,code_name,lkp_value) 
    SELECT unitid,institution,city,state,zip,code_name,lkp_value 
    FROM 
    (
    SELECT unitid,institution,city,state,zip, '+ @TEMP1+' 
    FROM '[email protected]_name+') AS cp 
    UNPIVOT (lkp_value for code_name IN ('[email protected]+') 
    ) AS up' 
    PRINT @Query 
--PRINT @Query1 
    EXEC(@query) 
    DROP TABLE #TEMP 

I 사용할 테이블 변수를 (참조 논평 한 지역) 그러나 이것이 어떻게 작동하는지 확실하지 않다.

이 코드를 복사하여 더 많은 이해를 얻으려면 쿼리 창에 붙여 넣으십시오. 그게 바로 호간이야. 나는 어떤 변수 안에 @colsUnpivot의 결과를 넣고 싶다. 그래서 나는 현재 @ TEMP1을 사용하고있는 코드의 다음 세그먼트로 pss 할 수있다.

+0

'하지만 문제가, 당신이 당신의 문제가 무엇을 설명 할 수있는 임시 table'의 결과를 전달하는가? – Lamak

+0

뭔가 이상하게 보입니다. 한편으로는 쉼표로 구분 된 열의 목록을 만드는 것처럼 보입니다. 그러나 당신은 당신이 테이블 변수를 전달하기를 원한다고 말한다. 어쨌든 문제는 분명 여기에 있습니다. ->'DECLARE @ TEMP1 NVARCHAR (MAX) = 'SELECT colsUnpivot FROM # TEMP'' @ TEMP1 (좋은 변수 이름! – Hogan

+0

필자는 실제로 복사하여 창에 붙여 넣을 필요가 없습니다. 여기에 범위에 문제가 있습니다 - 변수를 생성하기위한 동적 SQL이있는 경우 다시 전달할 수 없습니다 -이를 수행하는 유일한 방법은 별도의 함수를 사용하거나 동적 SQL을 사용하지 않는 방법을 찾는 것입니다 – Hogan

답변

0

DECLARE @colList VARCHAR(MAX) 

SELECT @colList = 
    Stuff((
    Select ', ' + C.COLUMN_NAME 
    From INFORMATION_SCHEMA.COLUMNS As C 
    Where C.TABLE_SCHEMA = T.TABLE_SCHEMA 
     And C.TABLE_NAME = T.TABLE_NAME 
    Order By C.ORDINAL_POSITION 
    For Xml Path('') 
), 1, 2, '') 
From INFORMATION_SCHEMA.TABLES As T 
WHERE TABLE_NAME = @Table_Name 
GROUP BY TABLE_NAME 

시도하고 당신은 임시 테이블이나 다른 광기의 필요하지 않습니다 @TEMP1

대신 @colList를 사용합니다.

(NB - 나는 https://stackoverflow.com/a/4936669/215752 여기에서 열 코드를 가지고)

+0

감사합니다. 하지만 그건 작동하지 않는 것이고, 내가 그것을 실행하도록 요청한 이유입니다. 다음은 메시지 156, 수준 15, 상태 1, 줄 16 키워드 'FROM'근처의 구문이 잘못되었습니다. 메시지 156, 수준 15, 상태 1, 줄 21 키워드 'ORDER'근처의 구문이 잘못되었습니다. – nick

+0

@nick --- ok 당신을 위해 작동 코드를 찾았습니다. – Hogan

+0

고맙습니다. @Hogan. – nick