繁体   English   中英

如何使用 SQL Server 从数据库中获取具有列的表的特定列中的所有表名和不同值

[英]How to get all the table names and distinct values in a particular column from a database for the tables which have a column using SQL Server

如果该列存在于数据库中,我正在尝试获取特定列中存在的所有表名和值。 对于没有列的表,请忽略这些。

例如:为所有具有 last_refresh_date 列的表查找数据库中列 'last_refresh_date' 中的所有表名和值。

我试过的代码是:

EXEC sp_MSforeachtable 'SELECT distinct ''?'' TableName, last_refresh_date FROM ?'

我收到一个错误,因为某些表中没有列名“last_refresh_date”。

我在这里先向您的帮助表示感谢

我将假设您使用的是最新版本的 SQL Server,因此可以访问STRING_AGG ,否则您将需要使用“旧”的FOR XML PATH方法。

无论如何,您可以使用一点动态 SQL 和UNION ALL实现这一点。 我假设您还需要表和架构名称:



DECLARE @SQL nvarchar(MAX),
        @ColumnName sysname = N'YourColumnName',
        @CRLF nchar(2) = CHAR(13) + CHAR(10);

DECLARE @Delimiter nvarchar(30) = @CRLF + N'UNION ALL' + @CRLF

SET @SQL = (SELECT STRING_AGG(N'SELECT N' + QUOTENAME(s.[name],'''') + N' AS SchemaName, N' + QUOTENAME(t.[name],'''') + N' AS TableName, ' + QUOTENAME(c.[name]) + N' FROM ' + QUOTENAME(s.[name]) + N'.' + QUOTENAME(t.[name]), @Delimiter) WITHIN GROUP (ORDER BY t.object_id)
            FROM sys.schemas s
                 JOIN sys.tables t ON s.schema_id = t.schema_id
                 JOIN sys.columns c ON t.object_id = c.object_id
            WHERE c.[name] = @ColumnName)

EXEC sys.sp_executesql @SQL;

暂无
暂无

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

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