2017-11-07 1 views
0

SQL 서버에서 하나의 PDF 파일을 특정 위치로 복사 할 수 있습니다. 하지만 여러 파일로 어떻게 할 수 있습니까? 내가 FormID, PDF와 테이블이xp_cmdshell을 사용하여 여러 파일을 복사하는 방법

EXEC master..xp_cmdshell 'BCP "SELECT PDF FROM [MEJAMES].[dbo].tblPolicyForms WHERE FormID = 20 " queryout "C:\Users\UserName\Docs\Folder\'[email protected]+'.pdf" -T -N' 

, PDF_Filename

select FormID,PDF,PDF_Filename 
from [dbo].[tblPolicyForms] 

enter image description here

어떻게 각 FormID, 추출 PDF 파일로 이름을 PDF_Filename.pdf를 통해 I 루프? 이것은 당신에게 당신이 어떤하여 출력 목록을 정의 할 수있는 기능을 제공하기 때문에 내가 커서 완패를 갔다

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 [DBname].[dbo].tblPolicyForms " queryout "C:\Users\UserName\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

쿼리 데이터를 한 줄에 한 파일의 BCP 정보와 함께 .bat 또는 .cmd 파일로 출력하고 대신 호출하십시오. 또는, xp_cmdshell이라고하는 문자열을 여러 줄과 같이 만드십시오. 예 :''BCP 'SELECT FROM [MEJAMES]. [dbo] .tblPolicyForms WHERE FormID = 20 "queryout"C : \ Users \ UserName \ Docs \ Folder \ IL02708G.pdf FormID = 22 "queryout"C : \ Users \ UserName \ Docs \ Folder \ "- T -N '+ CHAR (13) + CHAR (10) +'BCP"SELECT PDF에서 [MEJAMES]. [dbo] .tblPolicyForms Where FormID = IL00034H.pdf "-T -N'' –

답변

0

:

UPDATE : 그것은 나에게 오류를 제공 어떤 이유

원하는

CREATE TABLE #tblPolicyForms 
(
    FormID INT NOT NULL 
    ,PDF TEXT NULL 
    ,PDF_FIlename VARCHAR(200) 
) 


INSERT INTO #tblPolicyForms 
    VALUES(18, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF18Name.pdf') 
    ,(19, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF19Name.pdf') 
    ,(20, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF20Name.pdf') 
    ,(21, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF21Name.pdf') 
    ,(22, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF22Name.pdf') 
    ,(23, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF23Name.pdf') 
    ,(24, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF24Name.pdf') 
    ,(25, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF25Name.pdf') 
    ,(26, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF26Name.pdf') 
    ,(27, 'skjdfsakdjfhsldkfhsdlkjfhsdkfjh', 'PDF27Name.pdf') 


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

DECLARE FormID_cursor CURSOR FOR 
SELECT 
    FormID 
    ,PDF_FIlename 
FROM 
    #tblPolicyForms 
--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 WHERE FormID = '[email protected]+' " queryout "C:\Users\UserName\Docs\Folder\'[email protected]+'.pdf" -T -N' 
-- SELECT 'BCP "SELECT PDF FROM [MEJAMES].[dbo].tblPolicyForms WHERE FormID = '[email protected]+' " queryout "C:\Users\UserName\Docs\Folder\'[email protected]+'.pdf" -T -N' 

FETCH NEXT FROM FormID_cursor 
INTO @FormID, @FileName 

END 

CLOSE FormID_cursor 
DEALLOCATE FormID_cursor 
0
DECLARE @FormID varchar(4); 
DECLARE @FileName VARCHAR(200); 
DECLARE @CmdString VARCHAR(2000); 

DECLARE FormID_cursor CURSOR FOR 
SELECT 
    FormID 
    ,PDF_FIlename 
FROM 
    [dbo].[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 

    SET @CmdString = 'BCP "SELECT PDF FROM [dbo].[tblPolicyForms] where FormID = '[email protected]+' " queryout "C:\Users\UserName\Documents\ExportDir\'[email protected]+'" -T -N'; 
    EXEC master.dbo.xp_cmdshell @CmdString; 

FETCH NEXT FROM FormID_cursor 
INTO @FormID, @FileName 

END 

CLOSE FormID_cursor 
DEALLOCATE FormID_cursor 
관련 문제