【问题标题】:How do you find which database a table is located in, of which you know the name (e.g. dbo.mytable1), in Microsoft SQL Server Management Studio 2005?在 Microsoft SQL Server Management Studio 2005 中,您如何找到一个表位于哪个数据库中,您知道哪个数据库的名称(例如 dbo.mytable1)?
【发布时间】:2008-10-03 13:03:00
【问题描述】:

我知道我要查找的表的名称。我正在使用 Microsoft SQL Server Management Studio 2005,我想搜索我在工作室中连接的数据库服务器中的所有数据库。这可能吗?需要查询系统表吗?

【问题讨论】:

    标签: sql-server database sql-server-2005


    【解决方案1】:

    如上,但使用系统函数而不是系统表

    EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''
    

    【讨论】:

      【解决方案2】:

      您可以使用 sp_MSforeacheachdb。

      sp_MSforeachdb 'IF EXISTS(SELECT * FROM sys.tables WHERE [Name] = ''TableName'') PRINT ''?''';

      【讨论】:

        【解决方案3】:

        使用大师

        声明@db_name varchar(128) 声明@DbID int 声明 @sql_string nvarchar(4000) 声明@TableName varchar(30)

        选择@TableName = ''

        设置不计数

        创建表 [#tblDatabaseName] ( [DbName] [varchar] (128) NOT NULL , [TableName] [varchar] (128) NOT NULL )

        声明 db_cursor 游标 forward_only 为

        SELECT  name, DbID 
        FROM    master..sysdatabases
        WHERE   name NOT IN ('northwind', 'pubs')
        AND     (status & 32) <> 32        --loading.
        AND (status & 64) <> 64        --pre recovery.
        AND (status & 128) <> 128      --recovering.
        AND (status & 256) <> 256      --not recovered.
        AND (status & 512) <> 512      --Offline
        AND (status & 32768) <> 32768  --emergency mode.
        AND     DbID > 4
        

        打开 db_cursor

        从 db_cursor 获取下一个到 @db_name, @DbID

        而@@FETCH_STATUS = 0 开始

        set @sql_string = ''
        +'  Insert into #tblDatabaseName '
        +'  select  ''' + @db_name + ''' as ''DbName'',  '
        +'          o.name as ''TableName''  '
        +'  from               [' + @db_name + ']..sysobjects   o with(nolock)  '
        +'  where   o.name like ''' + @TableName + '''  ' 
        
        execute sp_executesql @sql_string
        
        fetch next from db_cursor into @db_name, @DbID
        

        结束

        解除分配 db_cursor

        从 #tblDatabaseName 中选择 *

        删除表#tblDatabaseName

        【讨论】:

          【解决方案4】:

          sp_MSForEachDB 是一个未记录的过程,可以为您执行此操作。输出输出有点困难,所以我把它留给你。

          EXEC sp_MSForEachDB 'USE [?] IF EXISTS(SELECT * FROM Sys.Objects WHERE Type = ''U'' AND Name = ''Product'') PRINT ''?'''
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-04
            • 2015-08-20
            • 1970-01-01
            相关资源
            最近更新 更多