在 SQL 数据库中查找列名的所有唯一值

Posted

技术标签:

【中文标题】在 SQL 数据库中查找列名的所有唯一值【英文标题】:Find all unique values of a column name in a SQL database 【发布时间】:2021-04-01 21:25:48 【问题描述】:

我们正在使用 SQL 构建一个大型数据库。数据库中的每个表都有许多列,但表中的一列告诉谁添加了该行数据。该值“人名”与 SSIS 中的变量相关联。同样,该变量告诉谁添加了该行。我如何创建一个查询来拉回该列中的所有名称,无论它在数据库中的什么位置使用。列的值因日期而异。

【问题讨论】:

这能回答你的问题吗? Find a value anywhere in a database I have a large database in SSMS。不,你没有。 SSMS 只是一个客户端工具。您的数据库位于SQL Server 我有点不清楚您要做什么。您能否单击编辑按钮并提供一些示例数据/结构以及您希望作为输出实现的目标? 如果您有一个大型数据库并且每一列都有相同的 ,那么您将从一个非常大的数据库中的每个表的每一行中提取一个值。 【参考方案1】:

RE:每个表都有相同的 ... 一个查询来拉回该列的所有值,无论它在数据库中的什么位置使用。

如果您有一个大型数据库并且每个表都有相同的列 ,那么您将从每个表的每一行中提取一个值......在一个非常大的数据库中。不确定这是您想要做的,但可以轻松完成。即使 仅在几个表中,以下内容也将起作用。

获取包含 的每个 schema.table 的列表,然后遍历它以获取 的值。以下应该可以工作。

DECLARE @colname sysname = '<Column_name>' -- just in case it is not in every table

-- capture name of every table here
CREATE TABLE #tablename ( schema_name sysname, table_name sysname, Id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED)
INSERT INTO #tablename (schema_name, table_name)
SELECT s.name schemaname, t.name tablename FROM sys.columns c
INNER JOIN sys.tables t ON t.object_id = c.object_id
INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE c.name = @colname

-- capture result of query here
CREATE TABLE #result ( schema_name sysname, table_name sysname, column_value VARCHAR(100) ) 


DECLARE @i INT = 1, @imax INT
SELECT @imax = MAX(Id) FROM #tablename

-- loop over tablename
DECLARE @query NVARCHAR(255)
WHILE @i <= @imax
BEGIN

SELECT @query = N'SELECT ' + schema_name + '.' + table_name + ',' + ' <Column_Name> FROM ' + schema_name + '.' + table_name
FROM #tablename WHERE Id = @i

INSERT INTO #result ( schema_name, table_name, column_value)
EXEC sp_executesql @query

SET @i += 1

END

【讨论】:

在心理上解析这个,当循环完成时,#result 将包含模式、表名和列中的所有值——目前是硬编码的——我假设你打算拥有一个 REPLACE在那里调用以使用@colname 变量替换列名?我认为您希望 column_value 上的 DISTINCT 有一个包含模式/表/唯一值的表,然后消费者需要提取唯一的 column_values 集,是吗? @billnkc。接得好。我不打算硬编码 。我写得太快了。但由于问题是在“Column_Name”上定义的,所以它按原样工作。关于 DISTINCT 值的另一个好问题,但这也不是必需的。

以上是关于在 SQL 数据库中查找列名的所有唯一值的主要内容,如果未能解决你的问题,请参考以下文章

使用唯一随机值更新sql表中的所有行,而不使用c#中的主键或唯一键

在 SQL Server 存储过程中查找表名的列名作为保留关键字

mysql唯一约束

C#中查询数据库中表的信息的语句怎么写

SQL中如何根据字段名查找该字段名存在于数据库的哪些表中?

在oracle SQL developer中从查询列名中查找表