Просмотр XML-анализа
Хорошего дня
У меня есть запрос, который просматривает и сортирует содержимое моего SQL. Это легко, если вы знаете, что такое XML-файл, но я пытаюсь создать XML-файл в качестве параметра, потому что он не всегда одинаков. Как я могу добавить параметр в путь? Я пытался, но он говорит, что это неправильно.
Это код в представлении, которое работает:
select
c3.value('@CtlgID','nvarchar(50)') AS 'ID',
c4.value('@label','nvarchar(50)') AS 'ID',
c5.value('@label','nvarchar(50)') AS 'ID'
from
(
select
cast(c1 as xml)
from
OPENROWSET (BULK 'C:\ISP\bin\EN\XML\Cataloghi\menuCat_756.xml',SINGLE_BLOB) as T1(c1)
)as T2(c2)
cross apply c2.nodes('/node') T3(c3)
cross apply c2.nodes('/node/node') T4(c4)
cross apply c2.nodes('/node/node/node') T5(c5)
Я пытаюсь добавить это к хранимой процедуре:
PROCEDURE [dbo].[Update_ISP_Child]
-- Add the parameters for the stored procedure here
@p1 nvarchar(50) = 'menuCat_756.xml'
AS
BEGIN
select
c3.value('@CtlgID','nvarchar(50)') AS 'ID',
c4.value('@label','nvarchar(50)') AS 'ID',
c5.value('@label','nvarchar(50)') AS 'ID'
from
(
select
cast(c1 as xml)
from
OPENROWSET (BULK 'C:\ISP\bin\EN\XML\Cataloghi\' + @p1,SINGLE_BLOB) as T1(c1)
)as T2(c2)
cross apply c2.nodes('/node') T3(c3)
cross apply c2.nodes('/node/node') T4(c4)
cross apply c2.nodes('/node/node/node') T5(c5)
END
Когда я добавляю свой параметр как @p1, он не работает.
Благодарю.
Жуань
1 ответ
Вы должны построить весь оператор динамически:
--the file's name
DECLARE @filename VARCHAR(250)='menuCat_756.xml';
--a tolerant staging table to help us get the result of EXEC
DECLARE @staging TABLE(TheXml NVARCHAR(MAX));
--a dynamically created command
DECLARE @cmd NVARCHAR(MAX)=
N'select c1
from OPENROWSET (BULK ''C:\ISP\bin\EN\XML\Cataloghi\' + @filename + ''',SINGLE_CLOB) as T1(c1)';
--This will shift the "result set" (which is one single XML) into our staging table
INSERT INTO @staging
EXEC(@cmd);
--Test it
SELECT * FROM @staging
Подсказка 1: я изменился SINLGE_BLOB
в SINLGE_CLOB
Подсказка 2: Вы должны преобразовать результат в XML, прежде чем использовать его в качестве XML.
Рекомендуется делать приведения после импорта, чтобы избежать ошибок, которые трудно найти...