我遇到TSQL问题。我有许多表,每个表包含不同数量的不同名称的fielsds。
我需要动态获取所有这些表,读取所有记录并将每条记录管理到字符串列表中,其中每个值用逗号分隔。而且做得很好。用这个字符串。
我认为我需要使用CURSORS,但是如果不知道具有名称和类型的具体数量的字段,我就无法进行FETCH。也许我可以创建一个具有动态字段数的表变量?
非常感谢!
Makarov Artem。
答案 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脚本之一。他们完全按照您的要求行事。即
我找到的最完整的例子是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”的要求:)。