programing

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

sourcetip 2023. 8. 20. 18:17
반응형

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

어떻게 하면 쉽게 블럽을 삽입할 수 있습니까?varbinary(MAX)필드?

예를 들어,

제가 삽입하고 싶은 것은: c:\picture.png입니다.
그 테이블은 나의 테이블입니다.
그 칼럼은 나의 그림 블로그입니다.
장소는 recid=1입니다.

SQL Server Management Studio 내에서 T-SQL을 사용하고 특히 OPENROWSET 명령을 사용하여 varbinary(max) 필드에 삽입할 수 있습니다.

예:

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에서 다음과 같이 사용할 수 있습니다.

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개의 추가 "파라미터"에 대해 징징대기 시작하고 잘못된 기본값을 제공합니다(파일이 변경됨).첫 번째를 수락하거나, 두 번째를 0으로 설정한 다음 세 번째와 네 번째로 설정하거나, 명시적으로 지정할 수 있습니다.

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

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

이 형식 정보를 파일에 저장하시겠습니까?[Y/n] y
호스트 파일 이름 [bcp.fmt]:C:\테스트\bcp_2.fmt

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

TSQL을 사용하여 BLOB를 선택하는 두 가지 방법은 다음과 같습니다.

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

다음과 같은 기능도 제공합니다.

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

FROM 절 뒤에 상관 관계 이름을 기록합니다(필수 사항).

그런 다음 INSERT SELECT를 수행하여 삽입할 수 있습니다.

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

그러나 SQL 서버 시스템의 디스크에서 파일을 읽기만 하면 됩니다.

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

관리 애플리케이션에서 16진수 형식(Management Studio)으로 확인할 수 있습니다.

예를 들어, 데이터베이스를 파일(로컬 서버)에 백업한 다음 위의 명령문을 사용하여 다른 위치에 다운로드할 수 있습니다.

관리 스튜디오에서 해야 하나요?cmd 라인에서 수행하는 방법은 다음과 같습니다.

"C:\Program Files\Microsoft SQL Server\"MSSQL\Binn\TEXCOPY.exe" /S < Server> /D < DataBase> /Timebable /Cmypictureblob /F "C:\picture.png" /W "whereRecId=" /I

좋아요... 너무 오래 걸렸어요sql-management studio 툴은 이와 같은 간단한 작업을 수행할 수 없습니다(이전에 쿼리 시간 제한을 설정할 위치를 찾을 때 확인한 바 있으며, 4개의 다른 위치에서 수행되었습니다).

다른 sql 편집기 패키지(내 경우 sql maestro)를 다운로드했습니다.여기에는 블롭을 볼 수 있는 블롭 편집기가 포함되어 있습니다. 그리고 이 필드에 새로운 블롭을 로드할 수 있습니다.

의견 감사합니다!

언급URL : https://stackoverflow.com/questions/1643627/how-to-insert-a-blob-into-a-database-using-sql-server-management-studio

반응형