使用嵌套查询从表列表/多个表中选择 - MS SQL
Posted
技术标签:
【中文标题】使用嵌套查询从表列表/多个表中选择 - MS SQL【英文标题】:Select from list of tables / multiple tables with nested query - MS SQL 【发布时间】:2020-09-29 04:47:20 【问题描述】:不确定这是否有一个简单的答案,但我基本上是在尝试这样做:
select id
from (select table_name from information_schema.columns where column_name = 'id')
where id = 1234
所以将表格列表传入 FROM。
我正在尝试检查所有存在此列的表,如果它们的匹配值为 1234。
并且不输入 31 次,从 table1 中选择,从 table2 中选择等等
而且不用做一堆连接。
可能吗?
【问题讨论】:
可以使用存储过程,但我相信不能使用纯 SQL!即您需要“动态 SQL”而不是“静态 SQL”。 请标记正在使用的数据库 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库使用的一种查询语言,而不是特定数据库产品的名称 - 由于您需要动态 SQL,因此这是高度特定于供应商的。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS 非常感谢大家,我知道从这里去哪里! 【参考方案1】:我写了这个存储过程。
我知道这很糟糕,我以前从未在 tsql(teesquill?)中写过任何东西,而我的目标只是得到一些工作的东西。
// 查找数据库中所有出现的值
USE [your db here]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[usp_query] (
@value NVARCHAR(128),
@colName NVARCHAR(MAX)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX);
-- DECLARE @tables NVARCHAR(MAX);
DECLARE @tabName NVARCHAR(MAX);
-- DECLARE @colName NVARCHAR(MAX);
DECLARE @count INT;
-- construct SQL
--SET @tables = N'SELECT Table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE "yourcollumn"'
DECLARE tabs CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'yourcollumn'
OPEN tabs
FETCH NEXT FROM tabs INTO @tabName
WHILE @@fetch_status = 0
BEGIN
--SET @count = N'SELECT count ( ' + @colName + ' ) FROM ' + @tabName + ' where ' + @colName + ' = ' + @value
DECLARE @SQLString NVARCHAR(500);
DECLARE @ParmDefinition NVARCHAR(500);
DECLARE @varOut NVARCHAR(25);
SET @SQLString = N'SELECT @count = count ( ' + @colName + ' ) FROM ' + @tabName + ' where ' + @colName + ' = ' + @value;
SET @ParmDefinition = N'@count NVARCHAR(25) OUTPUT';
EXECUTE sp_executesql @SQLString
,@ParmDefinition
,@count = @varOut OUTPUT;
SET @sql = N'SELECT ' + @colName + ' FROM ' + @tabName + ' where yourcollumn = ' + @value;
IF @varOut > 0
SELECT @tabName AS 'value found in table'
--EXEC sp_executesql @sql
FETCH NEXT FROM tabs INTO @tabName
END
CLOSE tabs
结束;
【讨论】:
以上是关于使用嵌套查询从表列表/多个表中选择 - MS SQL的主要内容,如果未能解决你的问题,请参考以下文章
在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回