Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从具有嵌套查询的表/多个表列表中选择-MS SQL_Sql_Sql Server_Join_Select_Nested - Fatal编程技术网

从具有嵌套查询的表/多个表列表中选择-MS SQL

从具有嵌套查询的表/多个表列表中选择-MS SQL,sql,sql-server,join,select,nested,Sql,Sql Server,Join,Select,Nested,不确定这是否有一个简单的答案,但我基本上正在尝试这样做: select id from (select table_name from information_schema.columns where column_name = 'id') where id = 1234 因此,将一个表列表传入FROM 我正在尝试检查此列存在的所有表是否具有1234的匹配值 在不输入31次的情况下,从表1中选择,从表2中选择,以此类推 不做一系列的连接 可能吗?我编写了这个存储过程 我知道这很糟糕,我以前从

不确定这是否有一个简单的答案,但我基本上正在尝试这样做:

select id
from (select table_name from information_schema.columns where column_name = 'id') 
where id = 1234
因此,将一个表列表传入FROM

我正在尝试检查此列存在的所有表是否具有1234的匹配值

在不输入31次的情况下,从表1中选择,从表2中选择,以此类推

不做一系列的连接


可能吗?

我编写了这个存储过程

我知道这很糟糕,我以前从未用tsql(teesquill?)写过任何东西,我的目标就是得到一些有用的东西

//在DB中查找所有出现的值

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

结束

可以使用存储过程,但我相信不能使用纯SQL!i、 e.您需要的是“动态SQL”而不是“静态SQL”。请标记正在使用的数据库您使用的是哪种DBMS产品?“SQL”只是所有关系数据库使用的一种查询语言,而不是特定数据库产品的名称——由于您需要动态SQL,这是高度特定于供应商的。请为您正在使用的数据库产品添加。太好了,谢谢大家,我知道该怎么办了!