안녕하세요
sql server로 예제 테이블을 만들어서 공부하는 중에 insert 하는 과정에서 테이블에 blob과 함께 데이터를 넣으려고 하는데 컬럼순서에 따라 오류가 발생합니다.
create table [dbo].[car]( [id] [int] NULL, [carname] [varchar](255) null, [txtfn] [varbinary](max) null, [fExtension] [varchar](50) null)
테이블은 다음과 같이 예제로 만들었고
insert 시 오류가 발생하는 쿼리문은 컬럼 순서대로 넣는
insert into [dbo].[car] select 9, 'test9', BulkColumn from openrowset(Bulk '~파일경로.pdf', SINGLE_BLOB) AS a BLOB, 'pdf'
에서 error 102, 'pdf' 근처의 구문이 잘못되었습니다 에러가 발생합니다.
하지만 blob을 컬럼을 마지막에 넣는 순서로 순서를 바꾸면
insert into [dbo].[car](id, carname, fExtension, txtfn) select 9, 'test9', 'pdf' ,BulkColumn from openrowset(Bulk '~파일경로.pdf', SINGLE_BLOB) AS a BLOB
오류 없이 테이블에 해당 데이터들이 잘 들어갑니다.
이런 현상 발생하는 원인이랑 해결법을 알 수 있을까요?
openrowset(datasource)의 결과를 행집합으로 가져오게 됩니다.
(=openrowset 함수 자체가 table과 같은 역할을 한다는 의미입니다.)
근데 두 문장에서 openrowset(....) 다음 이중으로 alias를 줬는데요.
(AS a BLOB : a도 alias, BLOB도 alias)
문법적으로는 둘다 에러가 나야 할 것 같습니다.
특히 첫번째 문장에서 'pdf'라고 쓰신 부분은 문법적으로는 Table이 와야 합니다.
첫번째 문장을 수정하면
insert into car
select
9,
'test9',
BulkColumn ,
fft
from openrowset(Bulk 'doc.pdf', SINGLE_BLOB) AS a
cross join (select 'pdf' as fft) as b
더 간단히 만들려면 이미 수정한 것처럼 9, test9와 같이 value를 칼럼 처럼 정의해주는 식입니다.
insert into car
select
9,
'test9',
BulkColumn ,
'pdf'
from openrowset(Bulk 'doc.pdf', SINGLE_BLOB) AS a