有没有办法在不使用游标或循环或临时表的情况下使用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
任何帮助或提示表示赞赏。
问候,戴夫。
答案 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