我想知道,如何将XML内容从任意文件加载到本地变量?
这适用于固定文件:
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
但是,我想从任意文件中加载数据。
这不起作用(因为BULK似乎只支持String参数)
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
我也尝试过以下操作(没有成功,因为执行EXEC时局部变量(@xml)似乎超出了范围):
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
我猜我需要使用临时表,但是如何?
答案 0 :(得分:3)
找到解决方案:
DECLARE @results table (result XML)
DECLARE @sqlstmt NVARCHAR(MAX)
SET @sqlstmt= 'SELECT * FROM OPENROWSET ( BULK ''' + @file + ''', SINGLE_CLOB) AS xmlData'
INSERT INTO @results EXEC (@sqlstmt)
SELECT @xml = result FROM @results
答案 1 :(得分:3)
您也可以使用sp_executesql
:
declare @stmt nvarchar(max), @xml xml
select @stmt = '
set @xml = (select * from openrowset(bulk ''' + @file + ''', single_clob) as data)
'
exec dbo.sp_executesql
@stmt = @stmt,
@params = '@xml xml output',
@xml = @xml output