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:ISPbinENXMLCataloghimenuCat_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:ISPbinENXMLCataloghi' + @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 时,它不起作用。

谢谢。

您必须动态构建整个语句:

--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:ISPbinENXMLCataloghi' + @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。
最好在导入进行转换,以避免几乎找不到错误......

相关内容

  • 没有找到相关文章

最新更新