美好的一天
我有一个查询,可以查看和排序我的 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。
最好在导入后进行转换,以避免几乎找不到错误......