Sql server 选择查询中的通用XML

Sql server 选择查询中的通用XML,sql-server,tsql,Sql Server,Tsql,有没有一种方法可以从“从任意表中选择*”查询中获取此XML 如果您需要将XML转换为XML,可以考虑使用XSLT。 < P>如果您需要将XML转换为XML,可以考虑使用XSLT。 尝试: Declare @Temp Table(Id Int, Name VarChar(20)) Insert Into @Temp Values(321, 'Book') Insert Into @Temp Values(654, 'Pen') Select ( Select 'id

有没有一种方法可以从“从任意表中选择*”查询中获取此XML



如果您需要将XML转换为XML,可以考虑使用XSLT。

< P>如果您需要将XML转换为XML,可以考虑使用XSLT。

尝试:

Declare @Temp Table(Id Int, Name VarChar(20))

Insert Into @Temp Values(321, 'Book')
Insert Into @Temp Values(654, 'Pen')

Select  (
            Select 'id' as '@name', 
                    id as '@value' 
            From   @Temp As B
            Where A.Id = B.Id
            FOR XML Path('column'), Type
        ),      
        (
            Select 'name' as '@name', 
                    Name as '@value' 
            From   @Temp As B
            Where A.Id = B.Id
            FOR XML Path('column'), Type
)
From    @Temp As A
FOR XML path('row'), Root('root')
请注意,这段代码使用了一个临时表变量,这样我就可以生成一些数据。修改此项以使用实际表格应该相对容易。

尝试以下操作:

Declare @Temp Table(Id Int, Name VarChar(20))

Insert Into @Temp Values(321, 'Book')
Insert Into @Temp Values(654, 'Pen')

Select  (
            Select 'id' as '@name', 
                    id as '@value' 
            From   @Temp As B
            Where A.Id = B.Id
            FOR XML Path('column'), Type
        ),      
        (
            Select 'name' as '@name', 
                    Name as '@value' 
            From   @Temp As B
            Where A.Id = B.Id
            FOR XML Path('column'), Type
)
From    @Temp As A
FOR XML path('row'), Root('root')

请注意,这段代码使用了一个临时表变量,这样我就可以生成一些数据。修改它以使用实际的表应该相对容易。

以下是一种获得所需结果的方法

declare @T table(id int, name varchar(20))

insert into @T values(321, 'Book')
insert into @T values(654, 'Pen')

select (
         select 'id' as '@name',
                T.id as '@value'
         for xml path('column'), type
       ),
       (
         select 'name' as '@name',
                T.name as '@value'
         for xml path('column'), type
       )
from @T as T
for xml path('row'), root('root')
如果您想使用
选择*
对任何表使用此选项,您可以使用此选项。 只要用表名替换
@T
。注意:只有列名是有效的XML元素名时,这才有效

select 
  (
    select T3.N.value('local-name(.)', 'sysname') as '@name',
           T3.N.value('.', 'nvarchar(max)') as '@value'
    from (
           select T1.*
           for xml path(''), type
         ) T2(N)
      cross apply T2.N.nodes('*') as T3(N)       
    for xml path('column'), root('row'), type
  )         
from @T as T1
for xml path(''), root('root')

这里有一个方法可以得到你想要的结果

declare @T table(id int, name varchar(20))

insert into @T values(321, 'Book')
insert into @T values(654, 'Pen')

select (
         select 'id' as '@name',
                T.id as '@value'
         for xml path('column'), type
       ),
       (
         select 'name' as '@name',
                T.name as '@value'
         for xml path('column'), type
       )
from @T as T
for xml path('row'), root('root')
如果您想使用
选择*
对任何表使用此选项,您可以使用此选项。 只要用表名替换
@T
。注意:只有列名是有效的XML元素名时,这才有效

select 
  (
    select T3.N.value('local-name(.)', 'sysname') as '@name',
           T3.N.value('.', 'nvarchar(max)') as '@value'
    from (
           select T1.*
           for xml path(''), type
         ) T2(N)
      cross apply T2.N.nodes('*') as T3(N)       
    for xml path('column'), root('row'), type
  )         
from @T as T1
for xml path(''), root('root')

这是一个相当大的话题!您可以从sql server没有XmlTransform函数开始,我不能在这里使用CLR。不能使用CLR吗?客户端转换?这是一个相当大的话题!您可以从sql server没有XmlTransform函数开始,我不能在这里使用CLR。不能使用CLR吗?客户端转换?谢谢,它对我的情况有效,但不适用。唯一的问题是它知道“Id”和“Name”列。我想找到一种方法,如何将select*从任何表转换为该格式。在子查询中不需要使用@Temp的
from
。您可以使用别名
A
直接查询字段。您将避免两次表格扫描。谢谢,它对我的情况有效,但不适用。唯一的问题是它知道“Id”和“Name”列。我想找到一种方法,如何将select*从任何表转换为该格式。在子查询中不需要使用@Temp的
from
。您可以使用别名
A
直接查询字段。您将避免两次表扫描。