【问题标题】:How to create a snapshot of a table, it's columns, and corresponding values, stored in an xml object如何创建存储在 xml 对象中的表、列和相应值的快照
【发布时间】:2015-05-07 04:39:18
【问题描述】:
DECLARE @TableName NVARCHAR(MAX) = 'my_TableNameName';
DECLARE @SQL NVARCHAR(500);
DECLARE @PrimaryID NVARCHAR(MAX) = '228';
SELECT @SQL = 
      N'SELECT 
            c.column_name AS ''@name'', 
            c.data_type AS ''@data_type'', 
            ISNULL(c.character_maximum_length, '''') AS ''@character_maximum_length''
            --[Current Column Value??]
        FROM INFORMATION_SCHEMA.COLUMNS c
            JOIN ' + @TableName + ' t on
                t.ID = ''' + @PrimaryID + '''
        WHERE TABLE_NAME = ''' + @TableName + ''' and TABLE_SCHEMA=''dbo''
        FOR XML PATH(''column''), ROOT(''' + @TableName + ''')';
PRINT @SQL

执行时会产生如下内容:

<my_TableName>
  <column name="aName" data_type="int" character_maximum_length="0" />
  <column name="bName" data_type="int" character_maximum_length="0" />
  <column name="cName" data_type="varchar" character_maximum_length="50" />
</my_TableName>

但是,对于传递给 sql 的给定 id,我无法生成如下内容:

<my_TableName>
  <column name="aName" data_type="int" character_maximum_length="0">aValue</column>   
  <column name="bName" data_type="int" character_maximum_length="0">bValue</column>
  <column name="cName" data_type="varchar" character_maximum_length="50">cValue</column>
</my_TableName>

是否可以更改我当前的动态 sql 以提取这些值并将它们放入它们的列名节点中?我可以采取其他步骤来产生上述结果吗?

【问题讨论】:

    标签: sql sql-server sql-server-2008 dynamic-sql sqlxml


    【解决方案1】:

    你试过了吗..

    select top 0 * FROM table FOR XML AUTO,XMLSCHEMA
    

    这不会为您提供您正在寻找的相同架构,但它确实包含您想要的所有数据并且更简单......

    【讨论】:

    • 谢谢,这很有帮助,但不是我想要的,我现在正在尝试调整它
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多