问题:
我想从 sql 服务器获取更改以打印到(可能很大)xml 文件中。Sql-Server 启用了 ChangeTracking 以识别具有更改的实体。因此我写了三个Scalar-valued Functions
可以为单个实体生成适当的 XML。
我还有三个Table-valued Function
返回特定 ChangeTracking 编号的实体 ID。
最后我打了这样一个电话:
select
(
select
(
select [dbo].GenerateServiceXml( CT.ServiceId )
from [dbo].GetServiceChangeSets( 22000 ) CT
) FOR XML PATH( 'Services' ), TYPE
),
(
select
(
select [dbo].GenerateDeviceXml( CT.DeviceId )
from [dbo].GetDeviceChangeSets( 22000 ) CT
) FOR XML PATH( 'Devices' ), TYPE
),
(
select
(
select [dbo].GenerateAccountXml( CT.AccountId ) )
from [dbo].GetAccountChangeSets( 22000 ) CT
) FOR XML PATH( 'Accounts' ), TYPE
)
FOR XML PATH( 'Changes' ), TYPE
只要GetXXXChangeSets
函数只为每个实体返回一个 EntityId,这就会起作用,但目前我为每个实体获得多个 XML-Rows。现在问题是以下错误消息:
Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我试过这个STUFF
命令,但它只接受一个varchar。当我在 varchar(max) 中转换输出时,<
和>
符号被替换。
这个问题还有其他解决方案吗?