SQL Query用于搜索所有表的模式

时间:2009-08-12 15:35:11

标签: sql-server sql-server-2008 tsql database-schema

我正在研究一个SQL Server 2008 Db,里面有很多表(大约200个)。其中许多表包含名为“CreatedDate”的字段。我正在尝试使用此特定字段标识所有表模式。

是否有SQL查询来执行此操作?

8 个答案:

答案 0 :(得分:50)

我会查询information_schema - 它的视图比基础表更具可读性。

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'

答案 1 :(得分:6)

您也可以尝试使用可用于此的许多第三方工具之一。

查询非常适合简单搜索,但如果您需要对数据进行更多操作,请搜索引用,这样您就可以在这些方面做得更好。

此外,当某些对象被加密并且您需要搜索

时,这些非常方便

我正在使用免费的ApexSQL Search,但市场上还有更多(也是免费的),例如Red Gate或SSMS Tool Pack。

答案 2 :(得分:5)

  select object_name(c.object_id) as table_name
    , schema_name(t.schema_id) as schema_name
    from sys.columns c
    join sys.tables t on c.object_id = t.object_id
     where c.name=N'CreatedDate';

如果您还想要其他表属性,它会变得更复杂,但您将引用对象目录视图,如sys.tablessys.columns等。

答案 3 :(得分:2)

我最喜欢的......

SELECT objParent.name AS parent, obj.name, col.*
FROM sysobjects obj 
    LEFT JOIN syscolumns col
        ON obj.id = col.id
    LEFT JOIN sysobjects objParent
        ON objParent.id = obj.parent_obj
WHERE col.name LIKE '%Comment%'
   OR obj.name LIKE '%Comment%'

上面我正在寻找“评论”。

如果您想要直接匹配,请删除百分号。

这将搜索表,字段和主键名称,约束,视图等内容。

如果您想在使用表格进行修改后搜索StoredProcs(并且需要使procs匹配),请使用以下内容...

SELECT name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Comment%'

希望有帮助,我发现这两个查询非常有用。

答案 4 :(得分:1)

使用此查询:

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 '%' + '<ColumnName>' + '%' )
    AND 
    ( t.type = 'U' ) -- Use This To Prevent Selecting System Tables

答案 5 :(得分:1)

对我来说,我只有读取运行查询的权限,所以我需要经常使用这个函数,这是我使用的:

SELECT  *
FROM    INFORMATION_SCHEMA.TABLES
where   TABLES.TABLE_NAME like '%your table name here%'

你可以用.COLUMNS替换.TABLES然后它会是这样的:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'

答案 6 :(得分:0)

同样的事情,但以ANSI方式

选择     * 从     INFORMATION_SCHEMA.TABLES 哪里     TABLE_NAME IN(                     选择                         TABLE_NAME                     从                         INFORMATION_SCHEMA.COLUMNS                     哪里                         COLUMN_NAME ='CreateDate'                   )

答案 7 :(得分:0)

您无需在SQL Server 2008中为此键入SQL Query。

在SSMS对象资源管理器中,选择所需数据库的数据库或表(如果需要在一个数据库中搜索),打开菜单View - &gt;对象资源管理器详细信息(或按F7),在搜索文本框中键入%CreatedDate%,ENTER,享受