Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
Sql 在数据库的所有列和所有表中搜索值_Sql_Sql Server_Database - Fatal编程技术网

Sql 在数据库的所有列和所有表中搜索值

Sql 在数据库的所有列和所有表中搜索值,sql,sql-server,database,Sql,Sql Server,Database,我想找到包含值Commerciale的列名,但我不知道列名或表,因此需要在整个数据库中搜索。我如何通过查询实现这一点 我正在使用SQL SERVER您可以使用系统表: SELECT c.name ColumnName , t.name TableName FROM sys.columns AS c JOIN sys.tables AS t ON c.object_id = t.object_id WHERE c.name like '%Commerciale%' 如果要查找名称为C

我想找到包含值Commerciale的列名,但我不知道列名或表,因此需要在整个数据库中搜索。我如何通过查询实现这一点


我正在使用SQL SERVER

您可以使用系统表:

SELECT 
    c.name ColumnName
 , t.name TableName
FROM sys.columns AS c
JOIN sys.tables AS t
ON c.object_id = t.object_id
WHERE c.name like '%Commerciale%'

如果要查找名称为Commerciale的列,只需使用sys对象即可:

选择s.[name]作为SchemaName, t、 [名称]作为表名, c、 [名称]作为列名称 从sys.s 在s.schema\u id=t.schema\u id上连接sys.t表 连接t.object\u id=c.object\u id上的sys.c列 其中c.[name]=N'Commerciale'; 但是,如果需要搜索行中值的内容,则需要使用动态SQL。这将为数据库中至少有一个字符串类型列的每个表返回一个数据集,并将返回其中一个列的值为“Commerciale”的任何行。如果需要包含该值,请更改WHERE to use a LIKE in it's子句,注意查询速度会非常慢:

声明@SQL nvarcharMAX, @CRLF nchar2=NCHAR13+NCHAR10; 设置@SQL=STUFFSELECT@CRLF+ N'选择N'+QUOTENAMEs.[name],+N'作为SchemaName,'+@CRLF+ N'N'+quotename.[name],+N'作为表名,'+@CRLF+ N'*'+@CRLF+ N'来自'+quoteName.[name]+N'.+quoteName.[name]+@CRLF+ 在哪里+ 填充选择@CRLF+ N'和'+QUOTENAMEc.[name]+N'=Commerciale' 来自sys.c列 在c.system\u type\u id=ct.system\u type\u id上连接sys.types ct 其中c.object\u id=t.object\u id 和ct。[名称]在N'char',N'varchar',N'nchar',N'nvarchar' 对于XML路径,键入.value'/text[1]',nvarcharMAX',1,8,N+N';' 从sys.s 在s.schema\u id=t.schema\u id上连接sys.t表 对于XML路径,键入.value'/text[1]',nvarcharMAX',1,2,N; -PRINT@SQL-你最好的朋友 EXEC sp_executesql@SQL;
这不会告诉您哪个列有值,您需要用自己的眼睛来做,但我不喜欢编写动态表动态透视。

使用信息模式来获取所有表及其列。使用动态SQL。等待等待等等。请提供您的DBMS产品SQL Server、Oracle、mySQL等。有一些解决方案可以满足您的需要,但会因DBMS的不同而有所不同。您是在寻找名为Commerciale的列还是一行值为“Commerciale”的列?