带参数的OPENROWSET文件进入sql

时间:2014-10-15 21:03:26

标签: sql sql-server-2008

我正在使用SQL Server 2008,我正在使用下一个查询读取此文件:

DECLARE @x xml;

SET @x = (
SELECT *
FROM OPENROWSET(BULK N'C:\Attachments\arch.xml', SINGLE_BLOB) AS [Document]
);
;WITH XMLNAMESPACES    (  'http://www.sat.gob.mx/TimbreFiscalDigital' as Timbre, 'http://www.sat.gob.mx/cfd/3' as cfdi) 
select   
TimbreUUID = Timbre.value('@UUID', 'varchar(100)') 
FROM @x.nodes('/cfdi:Comprobante/cfdi:Complemento/Timbre:TimbreFiscalDigital') a(timbre)

这个查询得到一个名为UUID的字段,这里一切都很好,但是现在我需要它而不是OPENROWSET (bulk 'string', SINGLE_BLOB)使用一个使用参数的字符串。

如何操作OPENROWSET使用参数?

例如:

declare @param varchar(max)='C:\Attachments\arch.xml'
SET @x = (
SELECT *
FROM OPENROWSET(BULK @param, SINGLE_BLOB) AS [Document]
);

抱歉,我对网络有一些限制,因此我无法正确使用编辑器

1 个答案:

答案 0 :(得分:0)

我用下一个代码解决了这个问题:

declare @path nvarchar(max)=('C:\EME870831T20.xml')
declare @results table (x xml)
declare @sql nvarchar(max)=N'SELECT CAST(REPLACE(CAST(x AS VARCHAR(MAX)), ''encoding="utf-16"'', ''encoding="utf-8"'') AS XML) FROM OPENROWSET(BULK '''+@path+''', SINGLE_BLOB) AS T(x)'
INSERT INTO @results EXEC (@sql) ;WITH 
XMLNAMESPACES('http://www.sat.gob.mx/cfd/3' as cfdi,'http://www.sat.gob.mx/TimbreFiscalDigital' as tfd)
SELECT xmldata.value('(@UUID)', 'varchar(100)') AS item_id  
FROM @results  CROSS APPLY
x.nodes('/cfdi:Comprobante/cfdi:Complemento/tfd:TimbreFiscalDigital') AS a(xmldata);