【问题标题】:In SQL Server Management Studio can I search for assets across multiple databases?在 SQL Server Management Studio 中,我可以跨多个数据库搜索资产吗?
【发布时间】:2010-09-14 00:36:23
【问题描述】:

我的日常 IDE 是 Eclipse,它具有出色的开放资源功能(CTRL+SHIFT+R 或 Navigate > Open Resource),允许用户跨多个项目搜索文件/资源​​。

我在 SQL Server Management Studio 中找不到类似的功能,有吗?

【问题讨论】:

  • 你的意思是,就像在数据库中的所有表中搜索列名一样?
  • 您使用的是什么版本的 SQL Server?
  • 我正在使用 SQL Server 2005,我正在考虑存储过程、表、视图等,但列也可以!

标签: sql-server ssms


【解决方案1】:

我相信这就是您正在寻找的: http://www.red-gate.com/products/sql-development/sql-search/

它完全免费,而且非常棒。


(来源:red-gate.com

【讨论】:

  • +1 不敢相信这不是公认的答案。很棒的工具!谢谢!
【解决方案2】:

您可以使用信息架构视图在 sql 数据库中搜索对象 http://msdn.microsoft.com/en-us/library/ms186778.aspx 有一个用于表、列、函数、存储过程等。

从 INFORMATION_SCHEMA.routines 中选择 * 其中 ROUTINE_DEFINITION 像 '%xp%_'

【讨论】:

    【解决方案3】:

    没有。 SMS 中没有默认机制可以跨项目进行搜索。

    【讨论】:

      【解决方案4】:

      您可以像这样使用 sp_MSforeachdb:

      sp_MSforeachdb 'SELECT * FROM ?.INFORMATION_SCHEMA.routines WHERE ROUTINE_TYPE = ''PROCEDURE'''
      

      上面将选择所有数据库中的所有过程,并以不同的结果集返回它们。使用不同的视图,您还可以选择表、列等。

      【讨论】:

        【解决方案5】:

        我希望有人比我有更好的答案。过去,我使用 CURSOR 搜索所有数据库并将结果插入临时表。然后我可以从临时表中选择并显示结果。

        我没有这个代码了。如果没有人想出更好的答案,我会回来用一些真实的代码编辑它。我认为会有一个DMV。有人吗?

        【讨论】:

          【解决方案6】:

          我制作了以下 CLR 存储过程,以显式并行搜索数据库中的所有表和所有列。也许它会做你想要的。它不搜索存储的过程或函数,但您可以查找值、列名、表名等,并以 XML 行的形式返回结果。请注意,这不应该在日常使用,但它对于偶尔的审计或取证/DBA 任务很有用,而且它绝对很快......在 2 秒内搜索 AdventureWorks 上的所有表,平板托管在一台普通的台式 PC 上。

          https://pastebin.com/RRTrt8ZN

          /*
              This script creates a CLR stored procedure and its assembly on a database that will let you search for
              keywords separated by a space on all columns of all tables of all types except 'binary', 'varbinary', 'bit',
              'timestamp', 'image', 'sql_variant', and 'hierarchyid'. This was made as a CLR stored proc to take advantage
              of explicit parallelism to make the search a lot faster. Be aware that this will use many cores so only use
              this for occasional DBA work. This has the potential to cause a DDoS type of situation if broad searches with
              many results are hammered into the server, since each request can try to parallelize its search. An optional
              parameter exists to limit parallelism to a set number of cores. You can also set filters on the tables or
              columns to search, including logical operators OR, AND, NOT, and parenthesis (see examples below). Results
              are returned as XML rows.
          
              To install you need owner rights. Also, because SQL Server doesn't allow secondary CLR threads access to 
              the stored procedure context, we extract the connection string from the first context connection we make.
              This works fine, but only if you are connected with a trusted connection (using a Windows account).
          
              ------------------------------------------------------------------
              -- CLR access must be enabled on the instance for this to work. --
              ------------------------------------------------------------------
              -- sp_configure 'show advanced options', 1;                     --
              -- GO                                                           --
              -- RECONFIGURE;                                                 --
              -- GO                                                           --
              -- sp_configure 'clr enabled', 1;                               --
              -- GO                                                           --
              -- RECONFIGURE;                                                 --
              -- GO                                                           --
              ------------------------------------------------------------------
          
              -----------------------------------------------------------------------------------
              -- Database needs to be flagged trustworthy to be able to access CLR assemblies. --
              -----------------------------------------------------------------------------------
              -- ALTER DATABASE [AdventureWorks] SET TRUSTWORTHY ON;                           --
              -----------------------------------------------------------------------------------
          
              Example usages:
              ---------------
              Using all available processors on the server:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john michael'
          
              Limiting the server to 4 concurrent threads:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john michael', @maxDegreeOfParallelism = 4
          
              Using logical operators in search terms:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = '(john or michael) and not jack', @tablesSearchTerm = 'not contact'
          
              Limiting search to table names and/or column names containing some search terms:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john michael', @tablesSearchTerm = 'person contact', @columnsSearchTerm = 'address name'
          
              Limiting search results to the first row of each table where the terms are found:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john michael', @getOnlyFirstRowPerTable = 1
          
              Limiting the search to the schema only automatically returns only the first row for each table:
                  EXEC [dbo].[SearchAllTables] @tablesSearchTerm = 'person contact'
          
              Only return the search queries:
                  EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john michael', @tablesSearchTerm = 'person contact', @onlyOutputQueries = 1
          
              Capturing results into temporary table and sorting:
                  CREATE TABLE #temp (Result NVARCHAR(MAX));
                  INSERT INTO #temp
                      EXEC [dbo].[SearchAllTables] @valueSearchTerm = 'john';
                  SELECT * FROM #temp ORDER BY Result ASC;
                  DROP TABLE #temp;
          */
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-20
            • 1970-01-01
            • 2021-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-24
            • 1970-01-01
            相关资源
            最近更新 更多