2011-07-25 7 views
1

이 문제와 관련된 다른 질문을 게시했지만 XLS에서 여러 행 데이터 가져 오기 문제를 직접 해결할 수있는 응답이 없습니다. 나는 드문 SQL 또는 DB 사용자입니다. 따라서 이러한 쿼리를 작성하는 것과 관련된 내 배경/경험이 제한적입니다. 내 목표를 달성하기위한보다 쉽고 직접적인 접근 방식이 있다면, 나는 분명히 그들에게 열려 있습니다. 나는 지나치게 넓히거나 다른 것을 의미하지는 않지만,이 사이트는 가장 도움이 될 것 같습니다. (다른 게시물에 답한 모든 분들께 감사드립니다.)여러 행 증가 XLS 일괄 처리에서 insetion에 대한 트리거가있는 FK ID SQL

일부 게시물에서 보았습니다. 작업 집합 기반 쿼리/트리거 (여러 행을 가져 오므로)가 있다는 것을 이해합니다. 궁극적으로 데이터를 상위 테이블로 가져올 필요가 있습니다. 하위 테이블은 부모 테이블의 고정 값 및 값으로 채울 수 있지만 PK/FK 관계는 유지 관리해야합니다. 그리고 이것이 내가 XLS에서 1 행 이상의 데이터를 가져올 때 가장 문제가되는 것 같습니다.

상위 테이블에서 삽입이 실행될 때 하위 테이블에 값을 삽입하는 트리거를 설정했습니다. 그러나 쿼리가 올바르게 실행되지만 여러 행의 데이터가 삽입 될 때 PK와 일치하는 FK를 가질 수 없습니다. FK는 항상 부모 테이블에 삽입 된 마지막 행의 ID를가집니다. 다른 포럼 게시물 (여기 및 다른 사이트)에서 여러 가지 방법을 시도했지만 항상 오류가 발생합니다.

INSERT INTO [prototype].[dbo].[PageVersion] ([Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu]) 
SELECT [Number], [PageId], [Properties], [StateId], [Language], [SearchText], [PageMetaDescription], [PageMetaKeyWords], [PageTypeId], [Name], [Title], [Owner], [Admin], [ShowInMenu] 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\test_import.xls', 'SELECT * FROM [Query$]'); 

나는 것이 유일한 다른 아이디어는 어떤 종류의를 만들 수 : 부모 테이블에 삽입하는 데 사용

ALTER TRIGGER [updatePgVer] 
    ON [prototype].[dbo].[PageVersion] 
FOR INSERT AS 
    BEGIN 
    SET NOCOUNT ON; 

-- Insert into PageHistory 
INSERT 
INTO [prototype].[dbo].[PageHistory] ([VersionID], [Date], [Action], [Who], [StateId], [Owner]) 
SELECT 
    @@IDENTITY 
    , GETDATE() 
    , 'created' 
    , 'xls_user' 
    , [StateID] 
    , 'xls_user' 
FROM inserted 

END 

그리고 쿼리 : 여기

내 updatePgVer 트리거 코드 루프는 각 행을 통과하여 한 번에 하나씩 가져 오기 때문에 @@ IDENTITY는 항상 일치합니다. 그러나 내가 본 예제는 수입에 적용하기가 어려워 보입니다.

답변

0

IDENTITY가있는 열인 VersionID 열의 값이 삽입 된 테이블에 있습니다. 당신은 같은 트리거에서 참조 할 수 있습니다이

INSERT 
INTO [prototype].[dbo].[PageHistory] ([VersionID], [Date], [Action], [Who], [StateId], [Owner]) 
SELECT 
    [VersionID], 
    , GETDATE() 
    , 'created' 
    , 'xls_user' 
    , [StateID] 
    , 'xls_user' 
FROM inserted 

일시적 트리거에 넣고, 삽입시 삽입에서 사용할 수있는 데이터를 보려면 :

SELECT * 
FROM inserted 
+0

당신에게 가볍게 침 감사합니다! 그런 간단한 해결책. 부모 테이블에서 올바른 ID 열 이름을 사용해야했지만 그렇지 않은 경우 즉시 처리되었습니다. 너무 오랫동안 그것을 쳐다 보면서 나는'StateID'와 똑같은 것을 잊었습니다. 나는 이것을 곧 투표 할 수 있기를 바란다. – Alex