2013-08-09 3 views
4

가 나는 대량 삽입까지 설정하는 SP에서이 코드가 실패대량 삽입 동적 SQL

Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

하지만 내 저장 프로 시저 내부

begin try 

    declare @sentFile nvarchar(255) 
    declare @bulk_cmd nvarchar(1000) = '' 
    declare @loadDate nvarchar(8) = Convert(nvarchar(8),@p_loadDate) -- @p_loadDate is char(8) 

    set @StrImportFolder = N'D:\EMVImports\' 
    set @sentFile = @StrImportFolder + N'etl_rnli_sent_'+ @loadDate + N'.txt' 

    SET @bulk_cmd = N'BULK INSERT loadSent 
       FROM ''' + @sentFile + N''' 
       WITH (
        FIRSTROW = 2 
        ,formatfile=''D:\EMVScripts\Sent_Format.xml'' 
       )' 
    Print @bulk_cmd 
    EXECUTE sp_executesql @bulk_cmd 

    -- more stuff happens here 
end try 

을이이 오류와 함께 실패 코드 출력 :

BULK INSERT loadSent  
FROM 'D:\EMVImports\etl_sent_20130529.txt'  
WITH (  
    FIRSTROW = 2  
    ,formatfile='D:\EMVScripts\Sent_Format.xml'  
) 

은 매력처럼 작동합니다. 나는 그것이 왜 sp_executesql 아래에서 실패하는지 전혀 모른다.

+2

[여기] (http://stackoverflow.com/questions/4050790/bulk-insert-using-stored-procedure)를 확인하십시오. – Romesh

+0

안녕하세요, 저는 그 페이지를 일찍 읽었습니다. 거기에 뭔가 빠졌습니까? – RichJohnstone

+2

당신은'@ bulk_cmd'가'NVARCHAR '이라고 말하고 있습니다 - 당신은'@ bulk_cmd'로 함께 연결된 모든 문자열 리터럴에'N' 접두사를 사용하려고 시도합니다. 또한 : 실행하기 전에'@ bulk_cmd'를 출력 했습니까? 괜찮아 보이니? 바보 같은 질문 :'@ sent_file'에 올바른 값을 전달하고 있습니까? –

답변

0

비슷한 쿼리를 사용하고 있습니다. 그리고 그것은 효과적입니다.

 
DECLARE @filepath nvarchar(500) 
SET @filepath = N'e:\5-digit Commercial.csv' 

DECLARE @bulkinsert NVARCHAR(2000) 

SET @bulkinsert = 
     N'BULK INSERT ZIPCodes FROM ''' + 
     @filepath + 
     N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')' 

EXEC sp_executesql @bulkinsert 

@sentFile의 값을 어떻게 설정합니까?

+0

위의 코드를 편집하여 설정 방법을 보여줍니다. '@p_loadDate'는 SP의 매개 변수입니다. – RichJohnstone

0

BULK INSERT에 대해 'From' 파일 경로를 동적으로 설정할 수 없습니다.

당신은 경로를 생성하는 동적

set @sentFile = @StrImportFolder + N'etl_rnli_sent_'+ @loadDate + N'.txt' 

다음은 @loadDate 파일 이름의 변수 구성 요소입니다.

위에서 주어진 실시 예의 변수로 일정 경로 이벤트를 사용

여기
SET @filepath = N'e:\5-digit Commercial.csv', 

변수는 모든 경우의 수정 경로가있다.

따라서 사전 정의 파일 경로를 사용해보십시오.