2017-11-08 12 views
1

내 실수가 어디인지 이해할 수 없습니다.커서를 사용하여 '+'근처에 구문이 잘못되었습니다.

테이블을 반복하고 특정 위치에 image 데이터 형식으로 저장된 PDF 파일을 전달하려고합니다.

나는 커서를 썼다,하지만 다음

CREATE TABLE #tblPolicyForms 
(
    FormID INT NOT NULL, 
    PDF VARBINARY(MAX) NULL, 
    PDF_FIlename VARCHAR(MAX) 
) 

INSERT INTO #tblPolicyForms 
    SELECT 
     FormID, PDF, PDF_FileName 
    FROM  
     [dbo].[tblPolicyForms] 
    WHERE 
     FormID IN (19, 20, 21, 22) 

--select * from #tblPolicyForms 

DECLARE @FormID varchar(4); 
DECLARE @FileName VARCHAR(200); 

DECLARE FormID_cursor CURSOR FOR 
    SELECT 
     FormID, PDF_FIlename 
    FROM 
     #tblPolicyForms 
    WHERE 
     FormID IN (19, 20, 21, 22) 
    --where whatever conditions you need to get the FormIDs you want to use 

OPEN FormID_cursor 

FETCH NEXT FROM FormID_cursor INTO @FormID, @FileName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC master.dbo.xp_cmdshell 'BCP "SELECT PDF FROM [MEJAMES].[dbo].tblPolicyForms " queryout "C:\Users\oserdyuk\Documents\ExportDir\'[email protected]+'" -T -N' 

    FETCH NEXT FROM FormID_cursor INTO @FormID, @FileName 
END 

CLOSE FormID_cursor 
DEALLOCATE FormID_cursor 

enter image description here

답변

1

사용 변수 '+'나에게 구문 오류가 있습니다 :

DECLARE @cmd NVARCHAR(MAX) = N'BCP "SELECT PDF FROM [MEJAMES].[dbo].tblPolicyForms " queryout "C:\Users\oserdyuk\Documents\ExportDir\'[email protected]+'" -T -N'; 

EXEC master.dbo.xp_cmdshell @cmd; 

문서 EXEC에서 같이 :

{val ue
| @ 변수 {OUTPUT}
| [DEFAULT]
}

그래서 당신은 단지 값 (문자) 전달할 수, 변수 또는 기본. 귀하의 예제에서 + 오류를 일으키는 표현식을 전달하려고합니다.


참고 : 각 문장을 세미콜론으로 끝내는 것이 좋습니다.

+0

감사합니다. 이제 파일을 가져옵니다. 그러나 어떤 이유로 그 크기는 0KB입니다. 그래서 그들은 비어 있습니다. 테이블 PDF 열에 이미지 데이터 형식으로 저장됩니다. 그 일과 관련이 있다고 생각하니? – Oleg

+0

@Oleg 새로운 질문을해야합니다. 'image' 데이터 유형은 쓸모가 없습니다. – lad2025

+0

@Oleg https://stackoverflow.com/questions/34803870/sql-server-blob-image-column-extracting-with-bcp-queryout-corrupted-files-an 아마 도움이 될지 확인하십시오. – lad2025