У меня есть ситуация в хранимой процедуре T-SQL, где в динамическом SQL параметр/s ссылается на другие переменные, значение которых имеет одинарные кавычки и другие предопределенные операторы. Проблема заключается в том, что скрипт T-SQL терпит неудачу, когда такое условие существует.Динамический 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>'[email protected] +'</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
Это хорошая идея, но я боялся, любых других предопределенных операторов, которые могут возникнуть на входе. – Rafi
Я не уверен, какие операторы вы имеете в виду (я не мастер XML), но вы можете определенно использовать ту же технику для замены других символов (например, «" и <до < ...) – GilM