2017-03-31 1 views
1

내가 줄 지어있다 SQL 문 큰 파일을 가지고 (?) :SQL 서버 오류에도 불구하고 Select 문에서 삽입의 시리즈를 계속 다음과 같이

INSERT INTO [table here] 
    SELECT [columns] 
    FROM OPENROWSET(xlsx tab 1) 

INSERT INTO [table here] 
    SELECT [columns] 
    FROM OPENROWSET(xlsx tab 2) 

... etc etc... 

문제는 가끔 XLSX 탭 # 2 (또는 22)가 존재하지 않아 오류가 발생할 수 있으며 전체 일련의 명령문이 실패합니다.

각 명령문을 자체 쿼리로 실행하거나 오류를 무시하고 계속 진행하는 방법이 있습니까?

감사합니다.

+1

일부 인서트가 발생하지 않을 수도 있지만 상관 없으면 try/catch에 각 인서트를 래핑 할 수 있습니다. 그것은 나에게 조금 부서지기는하지만 그것이 당신이 요구하는 것을 할 것입니다. –

+0

@SeanLange 메서드가 가장 좋습니다. 또 다른 방법은 얼마나 많은 탭이 있는지 결정한 다음 동적으로 삽입 문을 작성하는 커서입니다. 당신이 이미 작성된 대부분의 코드를 가지고 있기 때문에, 나는 그냥 TRY/CATCH로 감싸겠습니다. – scsimon

+0

BEGIN TRY/END TRY와 CATCH를 시도했지만 여전히 전체 블록을 롤백합니다. IDK가 OPENROWSET과 관련이 있다면 - 나도 "GO"를 사용해 보았지만 그 중 하나도 작동하지 않았다 – user2089039

답변

2

오류입니다 tricky.There 전체 배치를 중지 몇 가지 오류, 전체 세션을 중단하는 일부 잡힐 수없는 세션을 중단하고 자체 SSMS에서

을 시도 할 수없는 오류 하나 개 삽입을 원하는 경우 귀하의 경우에는,하지 BATCH SEPARATOR GO

INSERT INTO 
SELECT 
GO 

INSERT 
SELECT 
GO 

참조 및 추가 읽기로 구분 another..Try에 의해 영향을받을 수 있습니다 :
Error and Transaction Handling in SQL Server

+0

OK 이것은 작동 중입니다. 문제는 "GO"다음에 캐리지 리턴이 없으므로 이전에 온라인 상태가 아니었기 때문입니다. 나는 그것을 업데이트했고 잘 동작한다. 고맙습니다! – user2089039

1

이 라인을 따라 뭔가를 생각해보십시오. SQLServer에에서 처리

begin try 
    INSERT INTO [table here] 
     SELECT [columns] 
     FROM OPENROWSET(xlsx tab 1) 
end try 
begin catch 
    select 'Tab1 errored' 
end catch 

begin try 
    INSERT INTO [table here] 
     SELECT [columns] 
     FROM OPENROWSET(xlsx tab 2) 
end try 
begin catch 
    select 'Tab2 errored' 
end catch 
관련 문제