2013-12-09 2 views
0

좋은 하루.얻기 액세스

-- Pivot the table so we get the UW as columns rather than rows 
DECLARE @SQL NVARCHAR(MAX) 
SET @SQL = ' 
SELECT * 
FROM #PreProcessed 
PIVOT (SUM(Quotes) 
     FOR [UW] IN (' + @UWColumns + ') 
     ) AS bob' 

이 코드를 실행하여 동적 SQL을 실행합니다.

EXEC sp_executesql @SQL, 
        N'@UWColumns nvarchar(MAX)', 
        @UWColumns 

제 질문은 결과 테이블을 어떻게 저장합니까? 특히 컬럼이 몇 개 있는지, 심지어 컬럼이 호출 될지 모를 때?

나는 아래의 코드를 시도하지만 CREATE TABLE AS 구문에 반대 모두

+0

아마도 실제 테이블을 만들어야 할 것입니다. 'sp_exectutesql'의 외부에서 생성 된 임시 테이블은 in 안에 범위를 가질 것입니다. 그러나 그 안에 생성 된 임시 테이블 (변수 테이블 등)은 범위가 호출 코드로 반환 될 때 할당을 해제합니다. 동적 SQL은 동적 SQL뿐만 아니라 테이블을 생성하여이를 생성합니다. 또는 원본 (정규화 된) 데이터로 작업하도록 코드를 다시 팩터링하십시오. – MatBailie

답변

0

SQL 서버, SELECT * INTO .... 사용

INSERT INTO #Temp 
    EXEC sp_executesql @SQL, 
        N'@UWColumns nvarchar(MAX)', 
        @UWColumns 

감사를 작동하지 않습니다. 그래서 당신은 당신의 동적 SQL을 수정해야합니다 :이 문제를 해결 찾을 수

SELECT * INTO <YOUR TABLE> 
    FROM #PreProcessed 
    PIVOT (SUM(Quotes) 
      FOR [UW] IN (' + @UWColumns + ') 
      ) AS bob' 
+0

안녕하세요 도움을 주지만이 오류가 발생합니다. 메시지 208, 수준 16, 상태 0, 줄 012 잘못된 개체 이름 '#temp'. – Bobby

+0

오, 거기에 테이블 변수를 포착하지 않았습니다. 변수를 선언해야하기 때문에 어떻게 할 지 모르겠습니다. 결과를 임시 테이블에 저장하려고하는 이유는 무엇입니까? – Andrew

+0

나는 꽤 복잡한 보고서를 작성 중이고 내가 생산하는 데이터에 더 많은 정보를 추가해야한다. 불행히도이 모든 것이 sp로 묶여서 언제든지 실행할 필요가 있습니다. 내 동료가 두 번째 테이블을 사용하고 내 날짜 열에 가입하도록 제안했습니다. – Bobby

0

수있는 유일한 방법은 동적 SQL에 내 계산의 모든을 할 수 있었다. 그래서 두 테이블에서 작업해야한다는 것을 의미했습니다.

-- Pivot the table so we get the UW as columns rather than rows 
DECLARE @SQL NVARCHAR(MAX) 
SET @SQL = ' 
SELECT * INTO #temp 
FROM #PreProcessed 
PIVOT (SUM(Quotes) 
     FOR [UW] IN (' + @UWColumns + ') 
     ) AS bob 

SELECT DISTINCT t1.Date, d.Declines AS ''Declines'' , '[email protected]+' 
FROM #temp AS t1 LEFT OUTER JOIN 
#Declines AS d ON t1.DATE = d.DATE 
' 

PRINT @SQL 

EXEC(@SQL) 
관련 문제