DB 관련

[MSSql] varbinary insert & update

DevReff 2024. 12. 27. 09:44




728x90
반응형

CREATE TABLE [dbo].[BLOBTest](
 [LID] [bigint] NOT NULL,
 [LName] [varchar](50) NULL,
 [LPath] [varchar](max) NULL,
 [Lblob] [varbinary](max) NULL,
 [cdate] [datetime] NULL,
 CONSTRAINT [PK_BLOBTest] PRIMARY KEY CLUSTERED
(
 [LID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

 

 

--delete from BLOBTest where Lid=2


INSERT BLOBTest(LID, LName,LPath,LBlob)
SELECT 2, 'Test.jpg','C:\Users\Administrator\Downloads\1도서\대제국.txt', BulkColumn
FROM OPENROWSET (BULK N'C:\Users\Administrator\Downloads\1도서\대제국.txt', SINGLE_BLOB) AS Pic

 

위와 같이 BLOB/CLOB/NCLOB 등의 칼럼이 있고

여러개의 컬럼을 한번에 갱신 또는 추가하려고 하면

MSSql Studio 에서 직접 실행하면 문제없이 동작하나

vc++ 에서 OLE DB 를 이용하면 오류가 발생한다.

오류: DB_E_ERRORSINCOMMAND

=> One or more errors occurred during processing of command

 

그렇기 때문에 아래와 같이 하나의 칼럼씩 Update 시켜야 한다.

 

INSERT BLOBTest (LID, LName,LPath)
values (2, 'Test.jpg','C:\Users\Administrator\Downloads\1도서\대제국.txt')

 

update BLOBTest set(LID, LName,LPath,

LBlob=(SELECT BulkColumn FROM OPENROWSET (BULK N'C:\Users\Administrator\Downloads\1도서\대제국.txt', SINGLE_BLOB) AS Pic)

 

 

하지만 Bulk 를 사용하기 위해서는 사용자의 로그인 권한이 'bulkadmin' 이어야 한다.

즉, 이것은 MSSql에서 사용자의 속성에서 [서버 역할]을 'bulkadmin' 으로 설정해야 한다.

출처: https://devdb.tistory.com/9 [DB 관련:티스토리]