在 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 databaseI have a large database in SSMS
。不,你没有。 SSMS
只是一个客户端工具。您的数据库位于SQL Server
我有点不清楚您要做什么。您能否单击编辑按钮并提供一些示例数据/结构以及您希望作为输出实现的目标?
如果您有一个大型数据库并且每一列都有相同的 RE:每个表都有相同的
如果您有一个大型数据库并且每个表都有相同的列
获取包含
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。接得好。我不打算硬编码 以上是关于在 SQL 数据库中查找列名的所有唯一值的主要内容,如果未能解决你的问题,请参考以下文章
使用唯一随机值更新sql表中的所有行,而不使用c#中的主键或唯一键