表中的动态字段数

时间:2011-10-19 00:22:00

标签: tsql

我遇到TSQL问题。我有许多表,每个表包含不同数量的不同名称的fielsds。

我需要动态获取所有这些表,读取所有记录并将每条记录管理到字符串列表中,其中每个值用逗号分隔。而且做得很好。用这个字符串。

我认为我需要使用CURSORS,但是如果不知道具有名称和类型的具体数量的字段,我就无法进行FETCH。也许我可以创建一个具有动态字段数的表变量?

非常感谢!

Makarov Artem。

3 个答案:

答案 0 :(得分:1)

SELECT 
   ORDINAL_POSITION
  ,COLUMN_NAME
  ,DATA_TYPE
  ,CHARACTER_MAXIMUM_LENGTH
  ,IS_NULLABLE
  ,COLUMN_DEFAULT
FROM   
  INFORMATION_SCHEMA.COLUMNS 
WHERE   
  TABLE_NAME = 'MYTABLE' 
ORDER BY 
  ORDINAL_POSITION ASC; 

来自http://weblogs.sqlteam.com/joew/archive/2008/04/27/60574.aspx

答案 1 :(得分:1)

我会重新调整用于生成INSERT语句的许多T-SQL脚本之一。他们完全按照您的要求行事。即

  1. 对给定表进行反向工程以确定列名称和类型
  2. 生成分隔的值字符串
  3. 我找到的最完整的例子是here

    但只是简单的Google搜索“INSERT STATEMENT GENERATOR”就会产生几个可以重新调整用途的例子。

    祝你好运!

答案 2 :(得分:1)

也许你可以用这个做点什么。

select T2.X.query('for $i in * 
                   return concat(data($i), ",")'
                 ).value('.', 'nvarchar(max)') as C
from (
      select *
      from YourTable
      for xml path('Row'),elements xsinil, type
     ) as T1(X)
  cross apply T1.X.nodes('/Row') T2(X)    

它会为YourTable中的每一行提供一行,YourTable中的每个值都以C列中的逗号分隔。

这为整个表构建XML,然后解析该XML。如果你有很多行的表,可能会让你陷入困境。

顺便说一句:我从评论中看到你可以“只使用纯SQL”。我真的认为这不符合“纯SQL”的要求:)。