SQL Server Management Studio를 사용하여 블로브를 데이터베이스에 삽입하는 방법

StackOverflow https://stackoverflow.com/questions/1643627

문제

블로브를 어떻게 쉽게 삽입 할 수 있습니까? varbinary(MAX) 필드?

예로서:

내가 삽입하고 싶은 것은 : c : picture.png
테이블은 mytable입니다
열은 myPictureBlob입니다
장소는 Recid = 1입니다

도움이 되었습니까?

해결책

SQL Server Management Studio 내에서 T-SQL을 사용하여 Varbinary (Max) 필드에 삽입 할 수 있으며 특히 Openrowset Commmand를 사용하여 삽입 할 수 있습니다.

예를 들어:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath
)
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif'
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto

좋은 예/연습을 위해 다음 문서를 살펴보십시오.

큰 가치 유형으로 작업합니다

이 경우 파일 경로는 대상 SQL 서버와 관련이 있으며이 명령을 실행하는 클라이언트가 아닙니다.

다른 팁

MSDN에는 기사가 있습니다 큰 가치 유형으로 작업합니다, 수입 부품의 작동 방식을 설명하려고 시도하지만 동시에 두 가지를 수행하기 때문에 약간 혼란 스러울 수 있습니다.

여기서는 단순화 된 버전을 제공하고 있으며 두 부분으로 나뉩니다. 다음 간단한 테이블을 가정하십시오.

CREATE TABLE [Thumbnail](
   [Id]        [int] IDENTITY(1,1) NOT NULL,
   [Data]      [varbinary](max) NULL
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) ) ON [PRIMARY]

실행하는 경우 (SSMS에서) :

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

결과는 하나의 열이 이름이 붙은 테이블처럼 보입니다. BulkColumn. 그렇기 때문에 다음과 같은 인서트에서 사용할 수 있습니다.

INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

나머지는 더 많은 열이있는 삽입물에 맞추고 있으며, 테이블에 가질 수도 있고 그렇지 않을 수도 있습니다. 당신이 그 결과를 지명하면 select FOO 그런 다음 사용할 수 있습니다 SELECT Foo.BulkColumn 그리고 as 그 후에 테이블의 다른 필드에 대한 상수.

더 까다로울 수있는 부분은 해당 데이터를 파일로 다시 내보내는 방법이므로 여전히 괜찮은지 확인할 수 있습니다. CMD 라인에서 실행하면 :

bcp "select Data from B2B.dbo.Thumbnail where Id=1" 
queryout D:\T\TestImage1_out2.dds -T -L 1 

4 개의 추가 "매개 변수"에 대해 징징 거리고 오해의 소지가없는 기본값을 제공 할 것입니다 (이로 인해 파일이 변경 될 것입니다). 첫 번째 것을 수락하거나, 2 ~ 0을 설정 한 다음 Assept 3, 4 위를 설정하거나 명시 적으로 할 수 있습니다.

필드 데이터의 파일 저장 유형을 입력합니다 [Varbinary (max)] :
필드 데이터의 접두사 길이 입력 [8] : 0
필드 데이터 길이를 입력합니다 [0] :
필드 터미네이터를 입력합니다 [없음] :

그러면 다음과 같이 묻습니다.

이 형식 정보를 파일에 저장 하시겠습니까? [y/n] y
호스트 filename [bcp.fmt] : c : test bcp_2.fmt

다음에 실행해야 할 때 추가해야합니다 -f C:\Test\bcp_2.fmt 그리고 그것은 징징 거리는 소리를 멈출 것입니다 :-) 많은 시간과 슬픔을 절약합니다.

TSQL로 블로브를 선택하는 두 가지 방법이 있습니다.

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

만큼 잘:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

From Clause 다음의 상관 관계 이름은 필수입니다.

그런 다음 삽입 선택을하여 삽입 할 수 있습니다.

두 번째 버전을 사용하여 내가 설명한대로 업데이트를 수행 할 수도 있습니다. TSQL을 사용하여 SQL Server에서 블로브를 업데이트하는 방법 .

그러나 SQL Server 시스템에서 디스크에서 파일을 읽을 수 있습니다.

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a

16 진 양식 (Management Studio)의 관리 응용 프로그램에서 확인합니다.

예를 들어, 백업 데이터베이스를 파일 (서버의 로컬)으로 다음 위의 명령문으로 다른 장소로 다운로드 할 수 있습니다.

MGMT Studio에서해야합니까? CMD 라인에서 수행하는 방법은 다음과 같습니다.

"C : Program Files Microsoft SQL Server MSSQL Binn TextCopy.exe" /S <Server> /D <Database> /T MyTable /C MyPictureBlob /F "C : Picture.png" /W " = " /i

좋아 ... 이건 너무 오래 걸렸어. SQL-Management Studio 도구는 이와 같은 단순한 것들에 달려 있지 않습니다 (쿼리에서 타임 아웃을 설정할 위치를 찾을 때 전에 알아 차렸으며 4 개의 다른 위치에서 수행되었습니다).

다른 SQL 편집기 패키지 (내 경우 SQL Maestro)를 다운로드했습니다. 그리고 Blob을 볼 수있는 Blob Editor가 포함되어 있으며이 분야에 새로운 Blob을로드하십시오.

입력 주셔서 감사합니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top