我正在使用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]
);
抱歉,我对网络有一些限制,因此我无法正确使用编辑器
答案 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);