从数据库中的所有表中的某些列中查找值 - 动态sql?

时间:2016-09-21 13:11:44

标签: sql-server tsql while-loop dynamic-sql

有没有办法在不使用游标或循环或临时表的情况下使用t-sql执行此操作?也许通过使用动态sql?

我想从数据库中每个表的第一列获取最大值。

我使用syscolumns向我展示所有表的名称以及每个表中第一列的名称。

因此,在下面的(非工作)示例中,我需要找到一种循环通过syscolumns并使用@tabname和@colname的所有值的方法。有没有办法做到这一点?

declare @tabname sysname;
declare @colname sysname;

SELECT 
name                                    as [column name],
object_NAME(id)                         as [table name],
(select max(@colname) from @tabname)    as [max col value]
from syscolumns             
where colorder = 1

任何帮助或提示表示赞赏。

问候,戴夫。

1 个答案:

答案 0 :(得分:0)

您可以使用此类查询

;WITH cte
AS (SELECT
    object_id,
    MIN(column_id) mincolumnid
FROM sys.columns
GROUP BY object_id)
SELECT
    t.name,
    c.name
FROM sys.tables t
INNER JOIN sys.columns c
    ON t.object_id = c.object_id
INNER JOIN cte ct
    ON c.object_id = ct.object_id
    AND c.column_id = ct.mincolumnid