【问题标题】:Find all unique values of a column name in a SQL database在 SQL 数据库中查找列名的所有唯一值
【发布时间】: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
  • 我有点不清楚您要做什么。您能否单击编辑按钮并提供一些示例数据/结构以及您希望作为输出实现的目标?
  • 如果您有一个大型数据库并且每一列都有相同的 ,那么您将从一个非常大的数据库中的每个表的每一行中提取一个值。

标签: sql sql-server ssis


【解决方案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 值的另一个好问题,但这也不是必需的。
猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多