[SQL] 어떻게 파일에 이미지 필드를 내보내려면?
SQL어떻게 파일에 이미지 필드를 내보내려면?
나는 데이터베이스에 연결하려면 Microsoft SQL Server Management Studio를 사용하고 있습니다. 그것에서 나는 파일 데이터를 포함하는 이미지 열이 하나 개의 컬럼있는 테이블을 가지고있다. 또 다른 열은 파일 이름을 포함하는 문자열입니다.
나는 내가 기록을 선택하고 파일에이 데이터를 기록 할 수 있도록 몇 가지 SQL 스크립트를 작성할 수있는 몇 가지 방법이 있나요? 이것이 가능하지 않은 경우 또는이를 달성하기위한 간단한 방법은 무엇인가?
나는이 관련 질문을 본 적이 있지만 꽤 같은 보이지 않는다 : SQL 서버 2000의 파일에 이미지 저장 열을
해결법
-
==============================
1.
-- Write all database images (jpg) to file. --------- --------- --------- --------- --------- --------- --------- DECLARE CURSOR_ProductIds CURSOR FOR (SELECT ImgImagesId FROM ImgProductSample) DECLARE @ProductId INT; OPEN CURSOR_ProductIds FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId WHILE (@@FETCH_STATUS <> -1) BEGIN DECLARE @ImageData varbinary(max); SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = @ProductId); DECLARE @Path nvarchar(1024); SELECT @Path = 'C:\MyImages\Output'; DECLARE @Filename NVARCHAR(1024); SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = @ProductId); DECLARE @FullPathToOutputFile NVARCHAR(2048); SELECT @FullPathToOutputFile = @Path + '\' + @Filename; DECLARE @ObjectToken INT EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT; EXEC sp_OASetProperty @ObjectToken, 'Type', 1; EXEC sp_OAMethod @ObjectToken, 'Open'; EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData; EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2; EXEC sp_OAMethod @ObjectToken, 'Close'; EXEC sp_OADestroy @ObjectToken; FETCH NEXT FROM CURSOR_ProductIds INTO @ProductId END CLOSE CURSOR_ProductIds DEALLOCATE CURSOR_ProductIds -- Make sure the following statement is executed to enable file IO -- From http://msdn.microsoft.com/en-us/library/ms191188.aspx --------- --------- --------- --------- --------- --------- --------- sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
-
==============================
2.CodeProject의에서 mkader에서 :
CodeProject의에서 mkader에서 :
EXEC sp_configure 'show advanced options', 1; GO RECONFIGURE; GO EXEC sp_configure 'xp_cmdshell',1 GO RECONFIGURE; GO
그런 다음 서식 파일을 덤프 :
Declare @sql varchar(500) SET @sql = 'bcp DBName.dbo.tblTableName format nul -T -n -f C:\testblob.fmt -S ' + @@SERVERNAME select @sql EXEC master.dbo.xp_CmdShell @sql
내 서식 파일은 다음과 같이 보았다 :
10.0 12 1 SQLINT 0 4 "" 1 my_tablecol_id "" 2 SQLINT 1 4 "" 2 my_tablecol0 "" 3 SQLCHAR 2 256 "" 3 my_tablecol1 SQL_Latin1_General_CP1_CI_AS 4 SQLCHAR 2 256 "" 4 my_tablecol2 SQL_Latin1_General_CP1_CI_AS 5 SQLCHAR 2 256 "" 5 my_tablecol3 SQL_Latin1_General_CP1_CI_AS 6 SQLCHAR 2 2048 "" 6 my_tablecol4 SQL_Latin1_General_CP1_CI_AS 7 SQLIMAGE 4 0 "" 7 my_imagecol "" 8 SQLCHAR 2 2048 "" 8 my_tablecol6 SQL_Latin1_General_CP1_CI_AS 9 SQLINT 1 4 "" 9 my_tablecol7 "" 10 SQLINT 1 4 "" 10 my_tablecol8 "" 11 SQLINT 1 4 "" 11 my_tablecol9 "" 12 SQLBIT 1 1 "" 12 my_tablecol10 ""
나는 다음과 같이 형식 파일을 편집 :
10.0 1 1 SQLIMAGE 0 0 "" 1 my_imagecol ""
그리고 SSMS에서이 SQL을 실행 :
Declare @mynum int Declare @sql varchar(500) SET @mynum = 49 -- something meaningful only to me SET @sql = 'BCP "SELECT my_imagecol FROM DBName.dbo.tblTableName where my_tablecol_id=@mynum" QUERYOUT C:\myfilename.docx -T -fC:\testblob.fmt -S ' + @@SERVERNAME EXEC master.dbo.xp_CmdShell @sql
이 이미지 열 작품, 정말 잘 모든 종류의 데이터를했다.
-
==============================
3.
-- Write database image (jpg) to file -- http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101754 --------- --------- --------- --------- --------- --------- --------- DECLARE @ImageData varbinary(max); SELECT @ImageData = (SELECT convert(varbinary(max), ImageData, 1) FROM ProductImages WHERE Id = 1); DECLARE @Path nvarchar(1024); SELECT @Path = 'C:\MyImages\Output'; DECLARE @Filename NVARCHAR(1024); SELECT @Filename = (SELECT ImageFilename FROM ProductImages WHERE id = 1); DECLARE @FullPathToOutputFile NVARCHAR(2048); SELECT @FullPathToOutputFile = @Path + '\' + @Filename; DECLARE @ObjectToken INT EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT; EXEC sp_OASetProperty @ObjectToken, 'Type', 1; EXEC sp_OAMethod @ObjectToken, 'Open'; EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData; EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2; EXEC sp_OAMethod @ObjectToken, 'Close'; EXEC sp_OADestroy @ObjectToken; -- Make sure the following statement is executed to enable file IO -- From http://msdn.microsoft.com/en-us/library/ms191188.aspx --------- --------- --------- --------- --------- --------- --------- sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO
PS - 나는 그것이 잘못된 이미지 파일을 제작 작업 코드의 조각을 얻었다 후 'T-SQL을 사용하여 SQL Server의 파일 읽기 및 쓰기'기사에 대한 링크는 유용하지만.
-
==============================
4.나는 아직도 누군가를 도울 수 있기 때문에, 게시하고 싶어,이 2 세 스레드 이상 알고있다. 우리는 그들이 다른 SQL 서버로 가져올 수 있습니다 그래서, 파일에 대한 데이터베이스 테이블에서 다른 열 (문자 포함)과 함께 이미지를 내보내려면이 매우 편리합니다.
나는 아직도 누군가를 도울 수 있기 때문에, 게시하고 싶어,이 2 세 스레드 이상 알고있다. 우리는 그들이 다른 SQL 서버로 가져올 수 있습니다 그래서, 파일에 대한 데이터베이스 테이블에서 다른 열 (문자 포함)과 함께 이미지를 내보내려면이 매우 편리합니다.
아래의 코드는 선택의 파일 경로에 지정된 데이터베이스 테이블을 내 보냅니다.
Declare @sql varchar(500) SET @sql = 'bcp Your_db.Your_table out Your_File_Path(eg: C:\ImagesNames.Dat) -w -T -S ' + @@SERVERNAME EXEC @sql
-w 옵션은 유니 코드 형식의 데이터 파일이며, 우리가 구분 기호를 지정하지 않은 경우 구분 기호는 기본 탭 구분 기호를 할 것이다. 이 경우, 데이터 파일은 DAT 확장자로 저장됩니다. 어쩌면 그것은뿐만 아니라 다른 형식으로 저장 될 수 있지만,이 하나가 완벽하게 작동하는 반면 나는 그것을 테스트하지 않았습니다.
https://msdn.microsoft.com/en-gb/library/ms188289(v=sql.110).aspx
그런 다음 가져 오기 :
BULK INSERT Your_db.Your_table FROM 'Your_File_Path' with (DATAFILETYPE='widechar')
이 수입은 데이터가 지정된 데이터베이스 테이블에 매우 효율적으로 파일.
from https://stackoverflow.com/questions/1366544/how-to-export-image-field-to-file by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쿼리 SQL에서 날짜를 비교 (0) | 2020.05.02 |
---|---|
[SQL] SQL Server 2008의 페이징 방법? (0) | 2020.05.02 |
[SQL] 당신은 어떻게 최대 절전 모드로 사용자 지정 데이터베이스 함수를 호출 할 수 있습니까? (0) | 2020.05.02 |
[SQL] 어떻게 ResultSet의 자바 폐쇄 예외는 피할 수있다? (0) | 2020.05.02 |
[SQL] 선택하지 않고 직접 업데이 트를 생성하기 위해 LINQ를 사용하여 (0) | 2020.05.02 |