[英]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.