sql - 如何创建存储在 xml 对象中的表、列和相应值的快照

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

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 以提取这些值并将它们放入列名节点中?我还可以采取其他步骤来产生上述结果吗?

最佳答案

你试过这个吗..

select top 0 * FROM table FOR XML AUTO,XMLSCHEMA

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

关于sql - 如何创建存储在 xml 对象中的表、列和相应值的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884147/

相关文章:

sql-server-2008 - SQL的 “The media set has 2 media families but only 1 are provided. All members must be provided.”错误还有其他解决方案吗?

mysql - 如何优化count by max的主从查询?

c# - Entity Framework LINQ 多对多查询

sql - 在 SQL 中连接计算字段

sql - 使用 exists select 1 获取其中任何列包含序列的行

c# - 为什么 Entity Framework 会在直接sql立即返回时计算语句超时?

sql-server - 从数据库中检索数据时如何转义特殊字符?

sql - System.Void' 不是映射存储过程方法的有效返回类型

sql - 仅在 SQL Server 的日期时间列中更新时间

sql - 用于选择新的 JPA 标准查询 API