Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Here's the first technical tid-bit on this blog in awhile, courtesy of a long-concluded internal conversation that I rediscovered when I was cleaning out three months' worth of email from my inbox.
Roger wrote:
I'm trying to use the modify() method against an XML variable, and I keep getting "must be a string literal" errors. Any suggestions?
While it's true that native T-SQL doesn't currently support this scenario, Jerry came to the rescue with an approach utilizing parameterized dynamic SQL with output parameters. Here's Jerry's stored procedure, along with a sample call:
-- procedure to call modify() method
create procedure dynamic_xml_modify(@xquery nvarchar(max), @x xml output)
as
begin
declare @sql nvarchar(max);
-- quote ' characters to prevent sql injection
set @sql = N'set @p.modify(''' + replace(@xquery, N'''', N'''''') + ''');'
exec sp_executesql @sql, N'@p xml output', @p = @x output
end
go
-- sample call
declare @x xml;
set @x = N'<a/>';
exec dynamic_xml_modify N'insert <b/> as first into (/a)[1]', @x output;
select @x;
Thanks, Jerry, for allowing me to blog this innovative approach of yours. Sorry it took me almost three months to post it!
-wp