2017-10-12 1 views
1

내 SSDT 프로젝트에 몇 가지 데이터 마이그레이션 스크립트가 있습니다. 다른 임시 테이블을 하나 개의 테이블에서데이터 마이그레이션 스크립트를 사용할 때 "잘못된 열 이름"오류가 발생했습니다.

우선 한 데이터를 저장한다 : 다른 테이블 임시 테이블

IF EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = N'DocumentEvent' 
    AND column_name = N'Thumbprint' 
) 
BEGIN 
    IF NOT EXISTS 
    (
     SELECT * FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_NAME = N'tmp_DocumentEventCertificates' 
    ) 
    BEGIN 
     CREATE TABLE tmp_DocumentEventCertificates 
     (
      [EventId] UNIQUEIDENTIFIER NOT NULL, 
      [Thumbprint] nvarchar(100) 
     ) 
    END 

    INSERT INTO 
     tmp_DocumentEventCertificates 
    SELECT 
     [EventId], 
     [Thumbprint] 
    FROM 
     [DocumentEvent] 
    WHERE 
     [Thumbprint] IS NOT NULL 
END 

번째 데이터를 전송한다 : [Thumbprint][DocumentEvent] 테이블로부터 제거되는

IF EXISTS 
(
    SELECT * FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME = N'tmp_DocumentEventCertificates' 
) 
BEGIN 
    UPDATE 
     [DocumentAttachment] 
    SET 
     [DocumentAttachment].[Certificate_Thumbprint] = tmp.[Thumbprint] 
    FROM 
     tmp_DocumentEventCertificates AS tmp 
    WHERE 
     ([DocumentAttachment].[EventId] = tmp.[EventId]) AND 
     ([DocumentAttachment].[ParentDocumentAttachmentId] IS NOT NULL) 

    DROP TABLE tmp_DocumentEventCertificates 
END 

칼럼.
[Certificate_Thumbprint][DocumentAttachment] 테이블에 추가됩니다.

데이터는 [DocumentEvent].[Thumbprint]에서 [DocumentAttachment].[Certificate_Thumbprint]으로 전송되어야합니다. 데이터베이스 즉, 위의 이동을 필요로하는 상태에있을 때

이 스크립트는 [DocumentEvent].[Thumbprint] 존재, 예상대로 작동하고, [DocumentAttachment].[Certificate_Thumbprint] 존재하지 않습니다.

그러나 데이터베이스를 마이그레이션 할 때 때문에 "dumbpac 배포에 실패했습니다."잘못된 열 이름 '지문'오류가 발생했습니다.

SQLCMD가 전체적으로 배포 스크립트를 컴파일하려고 시도하기 때문에 이러한 현상이 발생합니다. 이는 [DocumentEvent].[Thumbprint]이있는 경우에만 성공적으로 수행 할 수 있습니다.

하지만 해결 방법은 무엇입니까?

첫 번째 스크립트에서 IF EXISTS처럼 보입니다.

답변

2

예, 맞습니다. 컴파일 오류입니다. 열이 없으면 스크립트를 컴파일 할 수 없습니다. IF 존재 및 기타 데이터 흐름 구성은 분석되지 않습니다.

당신은 EXEC에서 컴파일 오류를 생성하는 코드를 포장해야합니다

exec(
'INSERT INTO 
     tmp_DocumentEventCertificates 
    SELECT 
     [EventId], 
     [Thumbprint] 
    FROM 
     [DocumentEvent] 
    WHERE 
     [Thumbprint] IS NOT NULL') 
+0

감사합니다 많이! 이것은 나를 위해 작동합니다. – Dennis

관련 문제