使用sqlcmd“:r”将XML文件的内容转换为变量

时间:2013-07-03 14:38:43

标签: xml tsql variables syntax sqlcmd

我有一个XML文件,我想用它来将静态数据加载到我的数据库中。最好,我想使用sqlcmd“:r”进行文本替换,以便在我的sql脚本中将xml视为硬编码数据。

使用硬编码数据,我的脚本可以正常工作

--Working Code
DECLARE @XML XML
SET @XML = '
<clients>
    <client>
        <ClientNumber>ClientA</ClientNumber>
    </client>
    <client>
        <ClientNumber>ClientB</ClientNumber>
    </client>
</clients>
'

我想做的是这样的事情:

DECLARE @XML XML
SET @XML = '
:r .\ClientData.xml
'

ClientData.xml的内容与先前硬编码的xml文本相同。问题是sqlcmd解析器没有接受测试替换,而只是将值':r。\ ClientData.xml'放在我的xml变量中。

如果我尝试删除抽动,我会收到以下错误:

Incorrect syntax near '<'.

有什么方法可以强制sqlcmd在内部抽搐时执行,以便文本正确替换?

2 个答案:

答案 0 :(得分:7)

好的,这是我的黑客......

:setvar XMLDATA "'"

declare @mydata xml = 
$(XMLDATA)
:r "Data.xml"
$(XMLDATA)

基本上只是通过参数化单引号来解决解析器。

这很难看,但它允许我拥有一个有效的xml文件。

答案 1 :(得分:1)

我还没有找到一种强制命令从字符串内部运行的方法,但是一个不错的解决方法就是引用一个带引号的.txt文件。

<强> ClientData.txt

'
<clients>
    <client>
        <ClientNumber>ClientA</ClientNumber>
    </client>
    <client>
        <ClientNumber>ClientB</ClientNumber>
    </client>
</clients>
'

<强> Script.sql

DECLARE @XML XML
SET @XML =
:r .\ClientData.txt