2014-10-24 8 views
1

BCP를 사용하여 많은 BLOB를 파일로 추출하고 SQL 테이블의 ID 필드를 사용하여 각 파일에 고유 한 이름을 부여하는 방법이 있는지 궁금합니다. 이 작동 :테이블의 파일 이름으로 BCP 쿼리 아웃을 수행하려면 어떻게해야합니까?

DECLARE @Command NVARCHAR(4000) 
SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments 
       WHERE Hist_ID = ''00004F13''" 
       queryout "C:\Wha.pdf" -T -c -C RAW -S SERVERNAME -U SA -P pa$$word' 
EXEC xp_cmdshell @Command 

그러나 파일 이름을 얻기 위해, 나는 시도했다 :

DECLARE @FileName varchar(50), 
@Command NVARCHAR(4000) 
SET @FileName = Hist_ID+'wha.PDF' 
SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments 
       WHERE Hist_ID = ''00004F13''"  queryout' 
SET @Command = @Command + 'C:\' + @FileName + '-T -c -C RAW 
          -S SERVERNAME -U SA -P pa$$word' 
EXEC xp_cmdshell @Command 

내가 오류 얻을 : 잘못된 열 이름을 'Hist_ID'. 이 작업을 수행 할 수있는 방법이 있습니까? 어떤 도움을 주셔서 감사합니다!

+0

커서를 사용하여'MyDB.dbo.Attachments'를 거쳐 SQL을 동적으로 빌드하고 행마다 실행해야합니다 . 나보다 더 열정적 인 누군가가 이것을 게시 할 수도 있고, 그렇지 않으면 아무도하지 않을 것이다. –

+0

당신이 할 수 있다면, 굉장하겠습니까, 닉! 무리 감사. – user1646210

+0

안녕 모두 - 여기 솔루션에 필사적입니다. 나는 어디에서나 검색했고 "bcp 파일 이름에 datetime을 추가하는 방법"만을 발견했습니다. 당신이 줄 수있는 도움에 미리 감사드립니다. – user1646210

답변

2

시도해보십시오. 이것은 내가 한 번에 한 행을 실행해야한다는 것을 알고있는 유일한 방법입니다.

이 코드는 명령을 인쇄합니다. 실제로 실행되도록 xp_cmdshell의 주석 처리를 제거하십시오. 먼저 작은 샘플부터 시작하여 (선택을 제한 함)

DECLARE @Hist_ID VARCHAR(100) 
DECLARE @Ext VARCHAR(10) 
DECLARE @Command NVARCHAR(4000) 


DECLARE cAttachments CURSOR FOR 
SELECT DISTINCT Hist_ID,Extension 
FROM MyDB.dbo.Attachments 
ORDER BY Hist_ID 

OPEN cAttachments 

FETCH NEXT FROM cAttachments 
INTO @Hist_ID, @Ext 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    SET @Command = 'bcp "SELECT FileData FROM MyDB.dbo.Attachments 
       WHERE Hist_ID = ''' + @Hist_ID + '''" 
       queryout "C:\' + @Hist_ID + '.' + @Ext + '" -T -c -C RAW -S SERVERNAME -U SA -P pa$$word' 

    PRINT @Command 

    -- EXEC xp_cmdshell @Command 


    FETCH NEXT FROM cAttachments 
    INTO @Hist_ID 

END 

CLOSE cAttachments 
DEALLOCATE cAttachments 
+0

우수. 고마워, 닉. 1. 일부 행의 경우 Hist_ID에 알파 문자가 있기 때문에이 오류가 발생합니다. [Microsoft] [SQL Server 기본 클라이언트 10.0] [SQL Server] varchar 값 '0000400B를 변환 할 때 변환에 실패했습니다. '을 데이터 유형 int로 변경하십시오. 2. 나는 같은 테이블에있는 열과 다를 수있는 파일 확장자를 가져와야한다는 사실을 덧붙여 두었습니다. 파일 이름에 어떻게 추가 할 수 있습니까? 다시 한번 감사드립니다. – user1646210

+0

확인 변환 오류를 수정하고 확장 프로그램에 대한 열을 추가했습니다. 그것을 시도하고 참조하십시오. –

+0

완벽하게 작동합니다! (FETCH NEXT 절에 @Ext를 추가했습니다.) - 도움을 요청하십시오! – user1646210