我在 T-SQL 存储过程中有一种情况,在动态 SQL 中,参数/s 引用其他变量,其值具有单引号和其他预定义的运算符。当这种情况存在时,问题是 T-SQL 脚本失败。
附件是一个示例代码,演示了这种情况。任何想法如何解决这种情况?
DECLARE @TransVocObj XML,@xmlfragment XML,@SQL NVARCHAR(MAX)
SELECT @TransVocObj = '<TransactionVoucherViewModel><TransactionRows></TransactionRows></TransactionVoucherViewModel>'
DECLARE @Narration varchar(100)
SET @Narration ='AABBCC''DD''EEFF'-- @Narration ='AABBCCDDEEFF'
Select @xmlfragment=
'<TransactionRow>'+'<Description>'+@Narration +'</Description>'+'<DebitAmount>'+CONVERT(VARCHAR(30),500.00)+'</DebitAmount>'+'</TransactionRow>'
SET @SQL=N' SET @TransVocObj.modify(''insert '+ CONVERT(NVARCHAR(MAX),@xmlfragment)+' into (/TransactionVoucherViewModel/TransactionRows)[1] '') '
EXECUTE sp_executesql @SQL,N'@TransVocObj XML Output,@xmlfragment XML',@TransVocObj OUTPUT,@xmlfragment
SELECT T.Item.query('.//Description').value('.','VARCHAR(60)') FROM @TransVocObj.nodes('//TransactionRows/TransactionRow') AS T(Item)
数据库服务器是 MS SQL SERVER 2005