Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XML.Value() SQLType в виде параметра  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
SQL 2008
использую примерно такой код
для извлечения динамически значения из нода
работает прекрасно

declare @NODE2 nvarchar(100)='UDF1'
.....................................
SELECT  
[UDF1]=T.Item.value('(*[local-name(.)=sql:variable("@NODE2")])[1]', 'NVARCHAR(150)') 
FROM @doc.nodes('ROOT/ROW/ITEM') AS T(Item);
.......................



теперь возникает вопрос а как можно задать второй параметер в виде переменной ?
типа так

declare @NODE2 nvarchar(100)='UDF1'
declare @TYPE nvarchar(100)='nvarchar(150)'
.....................................
SELECT  
[UDF1]=T.Item.value('(*[local-name(.)=sql:variable("@NODE2")])[1]', @TYPE ) 
FROM @doc.nodes('ROOT/ROW/ITEM') AS T(Item);
.......................


Спасибо
25 авг 14, 11:25    [16487378]     Ответить | Цитировать Сообщить модератору
 Re: XML.Value() SQLType в виде параметра  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
michael R
теперь возникает вопрос а как можно задать второй параметер в виде переменной ?
Никак. Возвращаемое поле в рекордсете ведь не может иметь меняющийся тип.
25 авг 14, 16:17    [16489328]     Ответить | Цитировать Сообщить модератору
 Re: XML.Value() SQLType в виде параметра  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
michael R,

Динамический SQL?
declare @doc XML = '<ROOT></ROOT>'
declare @NODE2 nvarchar(100)='UDF1'
declare @TYPE nvarchar(100)='nvarchar(150)'

DECLARE @sql NVARCHAR(MAX) = 'SELECT  
[UDF1]=T.Item.value(''(*[local-name(.)=sql:variable("@NODE2")])[1]'', ''' + @TYPE + ''' ) 
FROM @doc.nodes(''ROOT/ROW/ITEM'') AS T(Item);'

EXEC sp_executesql @sql, N'@doc XML, @NODE2 nvarchar(100), @TYPE nvarchar(100)', @doc, @NODE2, @TYPE
26 авг 14, 08:28    [16491829]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить