После установки значения @ temp1 мне сказали, что я могу оптимизировать эти запросы в инструкции SELECT, получая 2 значения вместо того, чтобы иметь «повторный доступ к XML».Оптимизировать SQL-запрос, который запрашивает один и тот же XML несколько раз
DECLARE @temp1 XML
DECLARE @exec_gadget_config XML
DECLARE @exec_client_name_index NVARCHAR(500)
DECLARE @exec_client_number_index NVARCHAR(500)
SELECT @temp1 = '<gadget name="EYDocuments">
<drawer id="0000000002">
<otherColumns>
<col id="000000000B" name="Client Name" />
<col id="000000000C" name="Client Number" />
</otherColumns>
</drawer>
</gadget>'
SELECT @exec_client_number_index = (
SELECT @temp1.value('(//drawer[@id="0000000002"]/otherColumns//col[@name="Client Name"]/@id)[1]', 'NVARCHAR(500)')
)
SELECT @exec_client_name_index = (
SELECT @temp1.value('(//drawer[@id="0000000002"]/otherColumns//col[@name="Client Number"]/@id)[1]', 'NVARCHAR(500)')
)
SELECT @exec_client_number_index, @exec_client_name_index
- Возможно ли это?
- Предлагаемый ответ на этот вопрос приведен ниже. Удаляет ли это «повторный доступ к XML»?
- Если нет, то как я могу это сделать?
пространство
SELECT @exec_client_number_index = (
SELECT @temp1.value('(//drawer[@id="0000000002"]/otherColumns//col[@name="Client Name"]/@id)[1]', 'NVARCHAR(500)')
), @exec_client_name_index = (
SELECT @temp1.value('(//drawer[@id="0000000002"]/otherColumns//col[@name="Client Number"]/@id)[1]', 'NVARCHAR(500)')
);
вы используете суб-выбирает, так что вы все еще делаете «повторный доступ к XML ". каждый из этих подзапросов будет разобран/выполнен отдельно. –
Есть ли способ сделать это без «повторного доступа к XML»? – Hoppe
@ Хоппе: Проверьте мой ответ ... –