복붙노트

[SQL] SSIS 패키지는 임시 테이블의 메타 데이터를 가져 싶지 않다

SQL

SSIS 패키지는 임시 테이블의 메타 데이터를 가져 싶지 않다

나는 여러 흐름을 포함하는 SSIS 패키지를 가지고있다.

각각의 흐름은 생성 후 채워집니다는 "준비"테이블을 만들기위한 책임이 있습니다. 이 테이블 전역 임시 테이블입니다.

나는 정확히 같은 다른 테이블, 위에서 언급 한 않는 한 별도의 흐름을 (I 패키지를하지 않았다) 추가. 그것은 어떤 테이블 이름 외에, 정확히 다른 사람과 동일하면서 그러나 어떤 이유로, 패키지,이 흐름에 간헐적으로 실패합니다.

팝업 계속 오류 :

창조의 표현 :

"CREATE TABLE " + @[User::TmpMcsConfigurationDeviceHistory]  + " ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)

"

파싱 ​​식 (= 평가 된)

CREATE TABLE ##TmpMcsConfigurationDeviceHistory764E56F088DC475C9CC747CC82B9E388 ([RecId] [bigint] NULL,[DataAreaID] [nvarchar](4) COLLATE database_default NULL,[Asset] [bigint] NULL,[Code] [nvarchar](255) COLLATE database_default NULL,[Configuration] [bigint],[StartdateTime] [datetime] NULL,[EndDateTime] [datetime] NULL)

해결법

  1. ==============================

    1.명시 적으로 메타 데이터를 정의하는 결과 세트와 함께 사용하면 SSIS가 sp_describe_first_result_set 단계를 건너 뛰고 사용자가 정의하는 메타 데이터를 사용할 수 있습니다. 거꾸로 당신이 SSIS가 (나를 위해, 그 성능이 많은 도움이) 임시 테이블이 포함 된 SQL을 실행하는 데 얻기 위해 이것을 사용할 수 있다는 것입니다; 단점은 수동으로 유지하고 아무것도 변경하는 경우이를 업데이트 할 필요가있다.

    명시 적으로 메타 데이터를 정의하는 결과 세트와 함께 사용하면 SSIS가 sp_describe_first_result_set 단계를 건너 뛰고 사용자가 정의하는 메타 데이터를 사용할 수 있습니다. 거꾸로 당신이 SSIS가 (나를 위해, 그 성능이 많은 도움이) 임시 테이블이 포함 된 SQL을 실행하는 데 얻기 위해 이것을 사용할 수 있다는 것입니다; 단점은 수동으로 유지하고 아무것도 변경하는 경우이를 업데이트 할 필요가있다.

    쿼리 샘플 (저장 프로 시저 :

        EXEC ('dbo.MyStoredProcedure')
        WITH RESULT SETS
          (
            (
                MyIntegerColumn INT NOT NULL,
                MyTextColumn VARCHAR(50) NULL,
                MyOtherColumn BIT NULL
            )
          )
    

    쿼리 샘플 (단순 SQL :

    EXEC ('
        CREATE TABLE #a 
          (
            Col INT
          ) 
        INSERT INTO #a 
          (
            COL
          )
        SELECT 1 AS Col
    
        SELECT Col 
        FROM #a')
    WITH RESULT SETS ( (Col INT NOT NULL))
      )
    
  2. ==============================

    2.(일종의 해킹,하지만 작동 및 글로벌 임시 테이블의 사용을 변경할 필요가 없습니다) 또 다른 옵션에 "첫 번째 결과 집합을"가짜를 보내 실제 쿼리의 앞에 SET FMTONLY ON 명령을 사용하는 것입니다 올바른 열 구조 SSIS. 당신이 뭔가를 할 수 있습니다

    (일종의 해킹,하지만 작동 및 글로벌 임시 테이블의 사용을 변경할 필요가 없습니다) 또 다른 옵션에 "첫 번째 결과 집합을"가짜를 보내 실제 쿼리의 앞에 SET FMTONLY ON 명령을 사용하는 것입니다 올바른 열 구조 SSIS. 당신이 뭔가를 할 수 있습니다

    SET FMTONLY ON
    select 0 as a, 1 as b, 'test' as C, GETDATE() as D
    SET FMTONLY OFF
    
    select a, b, c, d from ##TempTable
    

    SSIS는 sp_describe_first_result_set을 실행하면, 그것은 당신의 FMTONLY 명령의 메타 데이터 및 열 이름을 반환하고 시도조차하지 않기 때문에 사용자의 임시 테이블의 메타 데이터를 확인할 수없는 불평하지 않습니다.

  3. ==============================

    3.당신이 SSIS 2012에서 작업하는 경우, 다음은 테이블의 메타 데이터를 가져 오기 위해 시스템 저장 프로 시저 sp_describe_first_result_set를 사용하며 임시 테이블을 지원하지 않습니다. 하지만 당신은 잘 작동에가는 테이블 변수와 열팽창 계수와 같은 다른 옵션을 갈 수 있습니다. https://connect.microsoft.com/SQLServer/feedback/details/629077/denali-engine-metadata-discovery-shuns-temp-tables

    당신이 SSIS 2012에서 작업하는 경우, 다음은 테이블의 메타 데이터를 가져 오기 위해 시스템 저장 프로 시저 sp_describe_first_result_set를 사용하며 임시 테이블을 지원하지 않습니다. 하지만 당신은 잘 작동에가는 테이블 변수와 열팽창 계수와 같은 다른 옵션을 갈 수 있습니다. https://connect.microsoft.com/SQLServer/feedback/details/629077/denali-engine-metadata-discovery-shuns-temp-tables

  4. ==============================

    4.나는 문제가 GUID 중복 문제에서 거짓말을 발견, (하나는 임시 테이블을 만들려면) 나는 요소를 복사하고 그들은 모두 복사에 같은 GUID를 받았다. 내 패키지에 모든 GUID를 다시 설정 도구를 사용하고이 내 문제를 해결했다.

    나는 문제가 GUID 중복 문제에서 거짓말을 발견, (하나는 임시 테이블을 만들려면) 나는 요소를 복사하고 그들은 모두 복사에 같은 GUID를 받았다. 내 패키지에 모든 GUID를 다시 설정 도구를 사용하고이 내 문제를 해결했다.

    감사!

  5. ==============================

    5.우리가 준비를위한 임시 테이블을 사용하는 것과 같은 문제를했다. 약간의 시간을 소비 한 후, 작업 주위를 발견했다.

    우리가 준비를위한 임시 테이블을 사용하는 것과 같은 문제를했다. 약간의 시간을 소비 한 후, 작업 주위를 발견했다.

    데이터 흐름 작업의 OLE DB / ADO 대상에서 당신은 준비 테이블의 이름을 지정하는 곳.

    대신 OPENROWSET의 SQL 명령에 AccessMode 속성을 변경하고 "#temp에서 선택 *"에 SQL 명령 속성을 지정합니다.

    만세, 그 작업은 예상대로.

    당신은 SQL 명령 이외의 액세스 모드를 지정할 때 여기 캐치는, SSIS는 테이블 / 뷰있을 것으로 기대하며 메타 데이터를 얻기 위해 호출 sp_describe_first_result_set에 SSIS를 변경했습니다. 당신은 SQL 명령을 지정할 때, 그렇게 운이 좋게 여전히 메타 데이터를 얻기의 옛날 방식을 사용하는 등 쿼리 나 SP 명령을 기다리고 있어요.

    http://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfe1c7c1-910a-4f52-9718-c3406263b177/usage-of-temp-tables-in-ssis-2012?forum=sqlintegrationservices#cfe1c7c1-910a-4f52-9718-c3406263b177

  6. from https://stackoverflow.com/questions/18346484/ssis-package-not-wanting-to-fetch-metadata-of-temporary-table by cc-by-sa and MIT license