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/