此查询将在数据库中搜索特定的列名称。我想更进一步,在返回的列中搜索特定值。
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name,
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%Example%'
有什么想法吗?
非常感谢
答案 0 :(得分:3)
例如,我有一个名为组织的数据库。我有多个表格,其中包含 tax_id 列。
大多数情况下,我们必须从整个数据库中找到这样一个列。 解决方案如下:
select table_name,column_name from information_schema.columns
where column_name like '%tax%'
在查询数据库名称时,您只需要更改愿意列名,并找到所需的结果
搜索任何值与整个数据库中的计算机一样,在哪个列和哪些表中计算计算机是否存在
首先我们需要编写一个存储过程,然后我们将它重用于我们的搜索,我从http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm得到它非常完美的结果。 执行商店程序后,我们得到了所需的结果,如下图所示。 图像显示整个数据库中关键字计算机的完整搜索结果。
以上是解决它的概念。以上要求的完全查询满足
Select tax_id from (select table_name from information_schema.columns
where column_name = 'tax_id') as temp
答案 1 :(得分:2)
这种搜索没有这样的系统表。虽然你可以为你的目的尝试这个
DECLARE @ValueToSearch NVARCHAR(500)
DECLARE @SearchColumn NVARCHAR(100)
DECLARE @TableName NVARCHAR(200)
DECLARE @ColumnName NVARCHAR(200)
SET @ValueToSearch ='YOUR VALUE TP SEARCH'
SET @SearchColumn = 'YOUR COLUMN'
DECLARE @getResult CURSOR
SET @getResult = CURSOR FOR
SELECT t.name AS table_name,c.name AS column_name FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE c.name = @SearchColumn
OPEN @getResult
FETCH NEXT FROM @getResult INTO @TableName,@ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
SET NOCOUNT ON ;
DECLARE @RESULT INT;
DECLARE @TYPE INT
DECLARE @QUERY NVARCHAR(1000)
SET @QUERY = 'select @RESULT=count(*) from ' + ISNULL(@TableName,'') +' WHERE '+ ISNULL(@ColumnName,'')+'='''+ ISNULL(@ValueToSearch,'') +''''
EXEC sp_executesql @QUERY,
N'@result int OUTPUT, @type int OUTPUT',
@RESULT OUTPUT,
@TYPE OUTPUT
IF(ISNULL(@RESULT,0)>0)
BEGIN
SET NOCOUNT ON;
SELECT ' COLUMN '+ @ColumnName + ' OF TABLE ' +@TableName+ ' HAS THIS VALUE.'
END
FETCH NEXT FROM @getResult INTO @TableName,@ColumnName
END
CLOSE @getResult
DEALLOCATE @getResult
由于
的Manoj