T-SQL,将XML数据加载到局部变量中

时间:2013-12-16 13:16:54

标签: sql sql-server xml sqlxml

我想知道,如何将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)

我猜我需要使用临时表,但是如何?

2 个答案:

答案 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