42

我正在开发一个 SQL Server 2008 Db,其中包含许多表(大约 200 个)。其中许多表包含一个名为“CreatedDate”的字段。我正在尝试使用此特定字段识别所有表架构。

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

4

8 回答 8

58

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

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%create%'
于 2009-08-12T19:07:18.737 回答
6

您也可以尝试使用许多可用的第三方工具之一来执行此操作。

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

此外,当某些对象被加密并且您需要搜索时,这些会非常方便

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

于 2013-06-04T11:13:00.110 回答
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等。

于 2009-08-12T15:37:52.123 回答
3

我最喜欢的...

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%'

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

于 2010-10-18T21:51:11.227 回答
2

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

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

您可以将 .TABLES 替换为 .COLUMNS ,然后它看起来像这样:

 SELECT *
 FROM   INFORMATION_SCHEMA.COLUMNS
 WHERE  columns.COLUMN_NAME like '%your column name here%'
于 2014-01-21T22:08:06.270 回答
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
于 2013-09-25T13:35:44.973 回答
0

同样的事情,但以 ANSI 方式

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'CreateDate')

于 2009-08-12T17:10:20.627 回答
0

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

在 SSMS Object Explorer 中选择所需数据库的 Databases 或 Tables(如果您需要在一个数据库中搜索),打开菜单 View--> Object Explorer Details(或者按 F7),在 Search 文本框中输入 %CreatedDate%,回车,享受

于 2010-10-19T01:18:55.077 回答