【问题标题】:SQL Query to search schema of all tablesSQL 查询以搜索所有表的架构
【发布时间】:2010-11-19 00:18:24
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:
      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 等。

    【讨论】:

    • 这成功了! select object_name(sc.object_id) as table_name , schema_name(st.schema_id) as schema_name from sys.columns sc, sys.tables st where sc.name=N'CreatedDate';
    • wrigth,我正在从内存中编写查询,忘记了 sys.columns 不存储架构。
    • 我更喜欢这个。 Information_schema 可以与数据库不同步,但是这个查询不能。
    • 可能不相关,我尝试this 使用PK,FK,D,C,V,UQ 等的多个选择语句来比较源数据库和目标数据库,但后来我在VS 中发现this 功能,但没有sql query比较完整的源数据库和目标数据库?
    【解决方案2】:

    同样的东西,但以 ANSI 方式

    选择 * 从 INFORMATION_SCHEMA.TABLES 在哪里 表名输入( 选择 TABLE_NAME 从 INFORMATION_SCHEMA.COLUMNS 在哪里 COLUMN_NAME = '创建日期' )

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我最喜欢的...

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 显然这不起作用;它会找到 SSMS 在其浏览器中显示的所有其他类型的对象
          【解决方案6】:

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

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

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

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

          【讨论】:

            【解决方案7】:

            使用这个查询:

            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
            

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-10
                • 2017-01-03
                • 2021-05-03
                • 1970-01-01
                相关资源
                最近更新 更多