Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите в чем я ошибся  [new]
gen-217
Member

Откуда:
Сообщений: 325
DECLARE @MemberSetting VARCHAR(MAX)
SELECT @MemberSetting = '<EntitySettings><EntitySetting><EntityId value="4"/><EntityTypeId value="4"/><SettingName value="IsGuest"/><SettingValue value="1"/></EntitySetting></EntitySettings>'

DECLARE @XMLParamsTable TABLE (EntityId INT, EntityTypeId INT, SettingName VARCHAR(50), SettingValue SQL_VARIANT)
DECLARE @idoc int
	EXEC sp_xml_preparedocument @idoc OUTPUT, @MemberSetting

		INSERT INTO @XMLParamsTable (EntityId, EntityTypeId, SettingName, SettingValue)
		SELECT EntityId, EntityTypeId, SettingName, SettingValue
				FROM OPENXML(@idoc, '/EntitySettings/EntitySetting', 0)
					WITH ( EntityId INT '@value', EntityTypeId INT '@value', SettingName VARCHAR(50) '@value', SettingValue SQL_VARIANT '@value' )sXML

SELECT * FROM @XMLParamsTable
Результат запросса NULL хотя должны быть данные подскажите в чем моя ошибка? msSQL Server 2005
2 июн 09, 17:31    [7257414]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите в чем я ошибся  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
c openxml знаком слабо
но я попробовал тупо сделать так как в примере в доке по openxml
WITH ( EntityId INT './EntityId/@value', EntityTypeId INT './EntityTypeId/@value', SettingName VARCHAR(50) './SettingName/@value', SettingValue SQL_VARIANT './SettingValue/@value' )sXML
и у меня получилось
EntityId    EntityTypeId SettingName                                        SettingValue
----------- ------------ -------------------------------------------------- ------------
4           4            IsGuest                                            1

(1 row(s) affected)
2 июн 09, 17:42    [7257483]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите в чем я ошибся  [new]
gen-217
Member

Откуда:
Сообщений: 325
а он нормально сработает если хмл будет возвращять не 1 стоку а несколько?
2 июн 09, 17:46    [7257514]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите в чем я ошибся  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Что ж Вы сами-то не попробуете?
DECLARE @MemberSetting VARCHAR(MAX)
SELECT @MemberSetting = 
'<EntitySettings>
<EntitySetting><EntityId value="4"/><EntityTypeId value="4"/><SettingName value="IsGuest"/><SettingValue value="1"/></EntitySetting>
<EntitySetting><EntityId value="8"/><EntityTypeId value="2"/><SettingName value="IsAdmin"/><SettingValue value="0"/></EntitySetting>
</EntitySettings>'

DECLARE @XMLParamsTable TABLE (EntityId INT, EntityTypeId INT, SettingName VARCHAR(50), SettingValue SQL_VARIANT)
DECLARE @idoc int
	EXEC sp_xml_preparedocument @idoc OUTPUT, @MemberSetting

INSERT INTO @XMLParamsTable (EntityId, EntityTypeId, SettingName, SettingValue)
SELECT EntityId, EntityTypeId, SettingName, SettingValue
FROM OPENXML(@idoc, '/EntitySettings/EntitySetting', 0)
WITH ( EntityId INT './EntityId/@value', EntityTypeId INT './EntityTypeId/@value', SettingName VARCHAR(50) './SettingName/@value', SettingValue SQL_VARIANT './SettingValue/@value' )sXML
SELECT * FROM @XMLParamsTable

EntityId    EntityTypeId SettingName                                        SettingValue
----------- ------------ -------------------------------------------------- ------------
4           4            IsGuest                                            1
8           2            IsAdmin                                            0

(2 row(s) affected)
2 июн 09, 17:50    [7257538]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите в чем я ошибся  [new]
gen-217
Member

Откуда:
Сообщений: 325
спасибо за помощь:)
2 июн 09, 18:06    [7257658]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите в чем я ошибся  [new]
mike909
Member

Откуда:
Сообщений: 662
gen-217,

А так не проще ?
DECLARE @MemberSetting XML
SELECT @MemberSetting = '
<EntitySettings>
  <EntitySetting>
    <EntityId value="4"/>
    <EntityTypeId value="4"/>
    <SettingName value="IsGuest"/>
    <SettingValue value="1"/>
  </EntitySetting>
</EntitySettings>'

DECLARE @XMLParamsTable TABLE (EntityId INT, EntityTypeId INT, SettingName VARCHAR(50), SettingValue SQL_VARIANT)

insert into @XMLParamsTable
SELECT 
  t.c.value('(./EntityId/@value)[1]','int') as [EntityId]
  ,t.c.value('(./EntityTypeId/@value)[1]','int') as [EntityTypeId]
  ,t.c.value('(./SettingName/@value)[1]','nvarchar(50)') as [SettingName]
  ,cast(t.c.value('(./SettingValue/@value)[1]','nvarchar(4000)') as SQL_VARIANT) as [SettingValue]
FROM @MemberSetting.nodes('/EntitySettings/EntitySetting') as t(c)

SELECT * FROM @XMLParamsTable
2 июн 09, 18:08    [7257670]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить