9

我将表导出到服务器,但找不到该表。也许我没有放置正确的目标数据库。如果我的服务器有多个数据库,而不打开每个数据库,如何找到此表?

我使用 MS Sql Server Management Studio 2008。

4

6 回答 6

13

粗糙和肮脏,但它会完成这项工作。

-- Instructions. Replace "table_name_here" with actual table name
sp_MSforeachdb 'USE ?
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N''[table_name_here]'') AND OBJECTPROPERTY(id, N''IsUserTable'') = 1)
BEGIN
  PRINT ''Found in db ?''
END'
于 2009-03-04T13:57:31.143 回答
7

单程

SELECT  DISTINCT DB_NAME(database_id) 
FROM [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)
WHERE OBJECT_NAME(object_id,database_id) = 'table_name'

或者,如果您有理由相信它会dbo在任何数据库的模式中

SELECT name
FROM   sys.databases
WHERE  CASE
         WHEN state_desc = 'ONLINE' 
              THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[table_name]', 'U')
       END IS NOT NULL 
于 2011-03-19T21:37:54.933 回答
3

基于上面 Martin Smith 的回答,但概括为一个视图,以提供一种跨数据库版本的 sys.tables -

CREATE VIEW ListTablesAllDBs

AS

SELECT 
    DB_NAME(database_id) as DBName,
    OBJECT_SCHEMA_NAME(object_id,database_id) as SchemaName,
    OBJECT_NAME(object_id,database_id) as TableName
FROM
    [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)

现在,如果我能想出一种方法来为列做同样的事情就好了......

编辑 - 忽略这一点,发现它有时会完全错过表格。

于 2013-06-12T22:36:12.073 回答
2

为了避免那些不知道如何命名数据库的“超级用户”的人头疼,进行了一些小的澄清:

EXEC sp_MSForEachDB '
USE [?]
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''Found here: ?'''
于 2011-03-17T20:29:21.310 回答
1
select 'select * from '+name+'.sys.tables where name=
        ''[yourtable]'';' from sys.databases

而不是 [yourtable],键入缺少的表的名称,然后再次运行结果。

于 2009-03-04T13:54:46.737 回答
1
EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
于 2009-03-04T14:02:01.307 回答