我遇到SQL
stored procedure
的问题。
我需要从数据库生成xml
。
在我的存储过程中,我收集所有信息,然后我的计划是根据需要生成XML文件(参见代码)。
我需要报告的所有交易都会加载到变量@transactionXml
中。它的数据类型为xml
,可能会变得非常大。
SET @xmlOut += '<export_datuma>' + cast(CAST(getdate() as date) as nvarchar(100)) + '</export_datuma>'
SET @xmlOut += '<export_szla_db>' + @noOfResults + '</export_szla_db>'
SET @xmlOut += '<kezdo_ido>' + cast(@fromDate as nvarchar(max)) + '</kezdo_ido>'
SET @xmlOut += '<zaro_ido>' + cast(@toDate as nvarchar(max)) + '</zaro_ido>'
SET @xmlOut += '<kezdo_szla_szam>' + @minInvoiceNo + '</kezdo_szla_szam>'
SET @xmlOut += '<zaro_szla_szam>' + @maxInvoiceNo + '</zaro_szla_szam>'
SET @xmlOut += cast(@transactionXml as nvarchar(max))
SET @xmlOut += '</szamlak>'
SELECT @xmlOut
当我尝试将数据类型强制转换为nvarchar(max)
时(如代码部分所示),字符串不完整并缺少某些信息。看来,字符串是在x符号后切割的。
有没有办法将@transactionXml
变量完全转换为文本,以便我可以在@xmlOut
语句中使用它?
答案 0 :(得分:3)
您不应该在字符串级别创建XML!试试这个:
SELECT CAST(getdate() as date) AS export_datuma
,@noOfResults AS export_szla_db
,@fromDate AS kezdo_ido
,@toDate AS zaro_ido
,@minInvoiceNo AS kezdo_szla_szam
,@maxInvoiceNo AS zaro_szla_szam
,@transactionXml AS [*] --This is the pre-created XML which should be fine
FOR XML PATH('szamlak');
预先创建的XML必须正常,否则您无法将其存储为XML本机类型。
在字符串级别创建XML可能会产生各种危险的副作用。想象一下你的一个变量中的一个禁止的角色......