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

标签 sql sql-server xml sqlxml

我想知道,如何将任意文件中的 XML 内容加载到局部变量中?

这适用于固定文件:

DECLARE @xml XML
SET @xml = 
(
  SELECT *
  FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)

但是,我想从任意文件加载数据。

这不起作用(因为 BULK 似乎只支持字符串参数)

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)

我猜我需要使用一个临时表,但是怎么做呢?

最佳答案

找到解决方案:

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 

关于sql - T-SQL,将 XML 数据加载到局部变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20611900/

相关文章:

sql-server - 在插入 XML 字段之前过滤重复节点

sql - 我们可以创建包含列的聚集索引吗

java - Android - 找不到 NullPointerException 的原因

c# - 存储过程不返回值 - C#

mysql - CASE 语句语法无效

mysql - 加快 MySQL 字符串 LIKE 查询

html - ID : When to use an Incremented Value and when to use a Generated String

C# Linq 连接表,其中左表可能为空

ios - 无法将值存储到全局数组 SWIFT 中

java - 如何在数组中存储多个 .jpg 和 .png 文件?安卓工作室