0
在我的一個C#項目中,我必須在數據庫表中存儲多行。爲此,我在存儲過程中將Xml數據作爲字符串數據類型傳遞,然後將其更改回XML,然後使用存儲在表中的sp_xml_prepareddocument。在SQL Server中處理XML輸入參數的最佳實踐
我在想這是否是一種正確的方法。或者有沒有其他最好的方法來處理這種情況。當XML將會變大時,會有性能損失嗎?
ALTER PROCEDURE [dbo].[InsertData]
@nSiteId int,
@nClaimId int,
@nEditSourceId int,
@sClaimEditXml NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON
DECLARE @hDoc INT, @nRC INT
EXEC @nRC = sp_xml_preparedocument @hDoc OUTPUT, @sClaimEditXml
IF @nRC <> 0
BEGIN
RAISERROR(N'apiInsertClaimCurrentEdits #1', 16, -1)
RETURN -1
END
IF EXISTS(SELECT * from ClaimCurrentEdits where [email protected] and [email protected] and EditSourceId = @nEditSourceId)
BEGIN
DELETE FROM ClaimCurrentEdits where [email protected] and [email protected] and EditSourceId = @nEditSourceId
END
INSERT INTO [ClaimCurrentEdits]
([SiteID]
,[ClaimID]
,[ErrorID]
,[ErrorDesc]
,[Severity]
,[ValidationDate]
,[EditSourceId]
)
SELECT * FROM OPENXML(@hDoc, '/ValidationResults/ValidationResult',2)
WITH
( SiteId int '../@SiteId',
ClaimId int '../@ClaimId',
ErrorId int '@ErrorId',
ErrorDesc varchar(2048) '@ErrorDesc',
Severity int '@Severity',
ValidationDate datetime '@ValidationDate',
EditSourceId int '@EditSourceId'
)
EXEC sp_xml_removedocument @hDoc
END
RETURN 0
/******************************************************************************/
GO