SQL에 Id(bigint)
및 DocumentContent(varbinary(MAX))
열이있는 Employee
테이블이 있습니다.바이너리 데이터를 가져올 때 Null 값이 저장 됨
이제 XML을 사용하여 Employee
테이블에 레코드를 삽입하려고하면 1Kb
보다 작은 파일에 대해 Null
값이 테이블에 저장됩니다. 파일 크기가 1Kb
보다 크면 이진 데이터로 변환되고 데이터베이스에 저장됩니다.
<MyDocuments>
<Rows>
<Id>62</Id>
<Document_Content>104116116112584747495550464954464846495856485748471041161161129910810510111011646104116109108</Document_Content>
</Rows>
</MyDocuments>
및 저장 프로 시저
CREATE Procedure [dbo].[Proc_SaveDocuments]
(
@XMLData as XML
)
AS
BEGIN
Declare @propertyCount Varchar(100) = '',@currentCount int=1,@Id bigint,@Content varbinary(MAX)
SELECT @propertyCount = convert(VARCHAR, @XMLData.query ('count(/MyDocuments/Rows)'))
SET @currentCount = 1
WHILE (@currentCount<[email protected])
BEGIN
SET @Id = @XMLData.value('data(/MyDocuments/Rows[sql:variable("@currentCount")]/Id)[1]', 'BIGINT')
SET @Content = @XMLData.value('data(/MyDocuments/Rows[sql:variable("@currentCount")]/Document_Content)[1]', 'VARBINARY(MAX)')
insert into Employee values(@Id,@Content) --inserts null in DocumentContent column when file size less than 1Kb, else converts it to binary and saves it in database.
SET @currentCount = @currentCount + 1
END
END
어떤 아이디어 왜 이런 일이 어떻게이 문제가 해결 될 수입니다 다음과 같이 생성
내 XML은?
얼마나 많은? –
tale852150
@ tale852150 : 행 수는 1이거나 1 이상이 될 수 있습니다. –