【发布时间】:2010-10-11 06:28:34
【问题描述】:
我将表导出到服务器,但找不到该表。也许我没有放置正确的目标数据库。如果我的服务器有多个数据库,而不打开每个数据库,如何找到此表?
我使用 MS Sql Server Management Studio 2008。
【问题讨论】:
标签: sql-server tsql sql-server-2005 ssms
我将表导出到服务器,但找不到该表。也许我没有放置正确的目标数据库。如果我的服务器有多个数据库,而不打开每个数据库,如何找到此表?
我使用 MS Sql Server Management Studio 2008。
【问题讨论】:
标签: sql-server tsql sql-server-2005 ssms
粗糙又脏,但它可以胜任。
-- 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'
【讨论】:
一种方式
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
【讨论】:
基于上面 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)
现在,如果我能想出一种方法来对列做同样的事情就好了......
编辑 - 忽略这一点,发现它有时会完全错过表格。
【讨论】:
为了避免让那些不知道如何命名数据库的“超级用户”感到头疼的小说明:
EXEC sp_MSForEachDB '
USE [?]
IF OBJECT_ID(''mytable'') IS NOT NULL AND
OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''Found here: ?'''
【讨论】:
select 'select * from '+name+'.sys.tables where name=
''[yourtable]'';' from sys.databases
输入缺失表的名称,而不是 [yourtable],然后再次运行结果。
【讨论】:
EXEC sp_MSForEachDB '
USE ?
IF OBJECT_ID(''mytable'') IS NOT NULL AND
OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''?''
'
【讨论】: