Как связать две таблицы (столбец типа uniqueidentifier-столбец типа xml)?

seg856
Дата: 07.05.2015 13:19:58
В одной таблице столбец типа uniqueidentifier, в другой - типа xml. Внутри xml-евского столбца такие данные:

<dictionary>
<item>
<key>
<string>MKSBGUID</string>
</key>
<value>
<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
</value>
</item>
</dictionary>

Нужно связать эти две таблицы в запросе select. Как это сделать, учитывая тип xml?
Glory
Дата: 07.05.2015 13:21:19
seg856
Как это сделать, учитывая тип xml?

наверное надо извлечь это значение из xml. А потом уже связывать
seg856
Дата: 07.05.2015 13:24:33
Нет специальных функций для извлечения из xml для ms sql server 2012?
Merdoc
Дата: 07.05.2015 13:25:33
Glory
Дата: 07.05.2015 13:26:14
seg856
Нет специальных функций для извлечения из xml для ms sql server 2012?

Разумеется есть
AlanDenton
Дата: 07.05.2015 13:45:26
DECLARE @xml XML = '
<dictionary>
	<item>
		<key>
			<string>MKSBGUID</string>
		</key>
		<value>
			<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
		</value>
	</item>
</dictionary>'

SELECT
	  t.c.value('key[1]/*[1]', 'VARCHAR(255)')
	, t.c.value('value[1]/*[1]', 'UNIQUEIDENTIFIER')
FROM @xml.nodes('*/*') t(c)


Так и не понял, что с чем Вы будете связывать.
a_voronin
Дата: 07.05.2015 13:46:58
CREATE TABLE #T(X XML)

INSERT INTO #T (X) VALUES(N'<dictionary>
<item>
<key>
<string>MKSBGUID</string>
</key>
<value>
<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
</value>
</item>
</dictionary>');

SELECT id = XX.I.value('(./value/string)[1]', 'uniqueidentifier')
FROM #T T CROSS APPLY T.X.nodes('/dictionary/item') XX(I);
GO
DROP TABLE #T
LexusR
Дата: 07.05.2015 14:49:54
CREATE TABLE #T(X XML)
INSERT INTO #T (X) VALUES(N'<dictionary>
<item>
<key>
<string>MKSBGUID</string>
</key>
<value>
<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
</value>
</item>
</dictionary>');

CREATE TABLE #U(U uniqueidentifier,res varchar(100))
INSERT INTO #U (U,res) VALUES('740dc6b5-efae-4558-a226-656483b03dd7','связать две таблицы (столбец типа uniqueidentifier-столбец типа xml')

SELECT U.res
FROM #T T CROSS APPLY T.X.nodes('/dictionary/item[key/string = "MKSBGUID"]') XX(I)
JOIN #U U ON U.U = XX.I.value('(./value/string)[1]', 'uniqueidentifier')
GO
DROP TABLE #T
DROP TABLE #U
хмхмхм
Дата: 07.05.2015 14:54:39
seg856
В одной таблице столбец типа uniqueidentifier, в другой - типа xml. Внутри xml-евского столбца такие данные:

<dictionary>
<item>
<key>
<string>MKSBGUID</string>
</key>
<value>
<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
</value>
</item>
</dictionary>

Нужно связать эти две таблицы в запросе select. Как это сделать, учитывая тип xml?


Самая плохая идея для оптимизатора - связывать по полю, над которым будет произведена операция.
a_voronin
Дата: 07.05.2015 15:08:23
хмхмхм
seg856
В одной таблице столбец типа uniqueidentifier, в другой - типа xml. Внутри xml-евского столбца такие данные:

<dictionary>
<item>
<key>
<string>MKSBGUID</string>
</key>
<value>
<string>740dc6b5-efae-4558-a226-656483b03dd7</string>
</value>
</item>
</dictionary>

Нужно связать эти две таблицы в запросе select. Как это сделать, учитывая тип xml?


Самая плохая идея для оптимизатора - связывать по полю, над которым будет произведена операция.


Если XML index создать, будет очень неплохо летать