Первая проблема связана с синтаксисом. Это:
from PSXML.x.nodes('/*:Policy/*:Setting') T(c);
должно быть:
from (VALUES(@PolicySettingsXml)) AS PSXML(x)
CROSS APPLY PSXML.x.nodes('/*:Policy/*:Setting') T(c);
Для того, что вы делаете, вы можете использовать метод value
для столбца id.
select
id = T.c.value('(@id)[1]', 'varchar(100)'),
[value] = T.c.query('(*:string/text())[1]')
from (VALUES(@PolicySettingsXml)) AS PSXML(x)
CROSS APPLY PSXML.x.nodes('/*:Policy/*:Setting') T(c);
Обратите внимание, что я изменяю пространствам имен, используя синтаксис «все пространства имен»: * : Объект . Поиск в Google «пространства имен SQL Server T-SQL XML» покажет вам, как вы должны это сделать. Я обманул из-за нехватки времени.