我正在尝试使用sp_MSforeachtable
子句将我的一些SQL Server表数据导出到XML。我可以在一定程度上取得成功,但坚持添加TableName&表标题作为层次结构的子项。
到目前为止我做了什么,
DECLARE @TableNames nvarchar(max)
SELECT
@TableNames = STUFF((SELECT
',OBJECT_ID(''' + CONVERT(nvarchar(20), Name) + ''')'
FROM Sys.Tables
WHERE Name ='TableCustomers'
FOR xml PATH (''))
, 1
, 1
, '')
Print @TableNames
我得到输出为
OBJECT_ID(' TableCustomers&#39)
有了这个,我正在运行另一个查询,
DECLARE @QueryForXMLs AS varchar(1000)
SET @QueryForXMLs = 'IF OBJECT_ID(''?'') IN (' + @TableNames + ')
Select * FROM ? FOR XML PATH(''Customer''), Root(''Customers'')'
Print @QueryForXMLs
EXEC sp_MSforeachtable @QueryForXMLs
有了这个,我得到了输出,
<Customers>
<Customer>
<Id>2</Id>
<CID>CU1</CID>
<Name>CuName</Name>
<Status>Active</Status>
</Customer>
</Customers>
如果我有一行作为第一个查询的输出,这可以正常工作。但是,如果第一个查询(WHERE Name Like'Table%'
而不是WHERE Name ='TableCustomers'
)有多行,我会获得Root&amp; Root子名称为硬编码。
为了使用sp_MSforeachtable
我尝试了以下方法,但由于表名与模式名称
一起出现,因此无法成功SET @QueryForXMLs = 'IF OBJECT_ID(''?'') IN (' + @TableNames + ')
Select * FROM ? FOR XML PATH(''Row''), Root(''?'')'