繁体   English   中英

表中的动态字段数

[英]Dynamic number of fields in table

我对TSQL有问题。 我有很多表,每个表包含不同数量的具有不同名称的fielsds。

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

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

非常感谢!

马卡罗夫·阿特姆(Makarov Artem)。

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

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

  1. 对给定表进行反向工程以确定列名和类型
  2. 生成分隔的值字符串

我找到的最完整的示例在这里

但只需通过简单的Google搜索“INSERT STATEMENT GENERATOR”即可获得几个可以重新调整以满足您需求的示例。

祝你好运!

也许您可以对此做些事情。

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中的每个值YourTable C列中的逗号分隔。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM