0
我使用SQL的sp_xml_preparedocument
功能将XML字符串转换成一个临时表所示:默认ID
create table #ExportTemplate
(
ExportTemplateId uniqueidentifier not null default newid()
, ExportTypeId uniqueidentifier not null
, TemplateDesc varchar(100) not null
, Active bit not null
, DateAdded datetime not null
, DateModified datetime not null
)
-- If Data is coming in by XML then merge changes into the table
if len(isnull(@XMLString,'')) > 0
begin
print '*** Merging XML Changes'
declare @XMLTable xml
, @idoc int
, @Cnt int
--Load XML
begin
set @XMLTable = @XmlString; --Convert string to xml
exec sp_xml_preparedocument @idoc OUTPUT, @XMLTable
-- insert into #ExportTemplate
select
isnull(cast(et.ExportTemplateId as uniqueidentifier), newid()) as ExportTemplateId,
cast(et.ExportTypeId as uniqueidentifier) as ExportTypeId,
et.TemplateDesc,
et.Active,
getdate() as DateAdded,
getdate() as DateModified
from openxml(@idoc,'/ArrayOfTemplate/Template', 2)
with (
ExportTemplateId uniqueidentifier 'ExportTemplateId',
ExportTypeId uniqueidentifier 'ExportTypeId',
TemplateDesc varchar(100) 'TemplateDesc',
Active bit 'Active'
) et
set @Cnt = @@rowcount;
print '*** ' + convert(varchar,@Cnt) + ' rows were retrieved from the XML Table';
exec sp_xml_removedocument @idoc
end
select * from #ExportTemplate
end
,我通过这个功能的XML看起来是这样的:
<ArrayOfTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Template>
<ExportTemplateId>7f0db0ed-d215-4a25-a38a-0305dddc56b3</ExportTemplateId>
<ExportTypeId>408b6a56-3b7c-41d8-902a-a20f5b2df170</ExportTypeId>
<TemplateDesc>Census Standard HR</TemplateDesc>
<Active>false</Active>
<DataElements />
</Template>
<Template>
<ExportTemplateId>13691df1-9b4c-4b94-b106-41494fe172aa</ExportTemplateId>
<ExportTypeId>94fb5330-9bd8-4622-8c26-dd212832b20c</ExportTypeId>
<TemplateDesc>Census Standard Payroll</TemplateDesc>
<Active>true</Active>
<DataElements />
</Template>
<Template>
<ExportTemplateId></ExportTemplateId>
<ExportTypeId>94fb5330-9bd8-4622-8c26-dd212832b20c</ExportTypeId>
<TemplateDesc>Census Standard Payroll New</TemplateDesc>
<Active>true</Active>
<DataElements />
</Template>
</ArrayOfTemplate>
如果我创建一个新的Template
(XML示例中的最后一个模板条目),我希望合并功能自动分配newid()
。我怎样才能做到这一点?目前,我有什么抛出的'Conversion failed when converting from a character string to uniqueidentifier.'
我从你的代码中假设这是SQL Server?请使用正确的RDBMS包括编辑您的问题和标签。版!你说的是'MERGE',但我看不到任何东西要合并......是这样吗,已经有'#ExportTable'中的数据了,你必须合并(更新/插入)与XML中的数据?是只有一个XML还是一次有很多XML?当然,这可以做得更好('FROM OPENXML'已过时),但我不完全明白你需要什么... – Shnugo
这个问题解决了吗?你需要进一步的帮助吗?请允许我提示一个提示:如果这个问题已经解决,那么在(最佳)答案的投票柜台下面勾选验收检查将会非常友善。这将1)标记此问题已解决2)使追随者更容易找到最佳解决方案3)支付点给答复者和4)支付点给你。既然你已经跨越了15分的边界,你还需要额外的投票。这是SO的方式来说声谢谢。快乐编码! – Shnugo