2009-03-04 36 views
9

Tôi đã xuất bảng đến máy chủ nhưng tôi không thể tìm thấy bảng. Có lẽ tôi đã không đặt đúng cơ sở dữ liệu đích. Làm thế nào tôi có thể tìm thấy bảng này nếu máy chủ của tôi có nhiều cơ sở dữ liệu, mà không cần mở từng cơ sở dữ liệu?Tìm bảng trên nhiều cơ sở dữ liệu SQL SERVER 2005

tôi sử dụng MS SQL Server Management Studio 2008.

Trả lời

13

Thô và bẩn, nhưng nó sẽ thực hiện công việc.

-- 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' 
+1

+1 để sử dụng sp_MSforeachdb, điều mà tôi không biết. – cdonner

+0

Đây là khi bạn phát hiện ra rằng hai năm hỗ trợ SQL Server có thể hữu ích :) –

1
select 'select * from '+name+'.sys.tables where name= 
     ''[yourtable]'';' from sys.databases 

Thay vì [yourtable], gõ tên của bảng mất tích, và chạy kết quả một lần nữa.

1
EXEC sp_MSForEachDB ' 
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND 
    OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1 
    PRINT ''?'' 
' 
2

rõ nhỏ chỉ để tránh đau đầu cho những người có 'SuperUsers' người không biết làm thế nào để đặt tên cho DBS:

EXEC sp_MSForEachDB ' 
USE [?] 
IF OBJECT_ID(''mytable'') IS NOT NULL AND 
    OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1 
PRINT ''Found here: ?''' 
+0

vì vậy bạn đã thoát khỏi tên cơ sở dữ liệu. cuộc gọi tốt –

5

Một cách

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' 

Hoặc nếu bạn có thể tự tin hợp lý trong sơ đồ dbo trong bất kỳ cơ sở dữ liệu nào

SELECT name 
FROM sys.databases 
WHERE CASE 
     WHEN state_desc = 'ONLINE' 
       THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[table_name]', 'U') 
     END IS NOT NULL 
+0

Ý tưởng tuyệt vời, cảm ơn. Tổng quát nó thành một cái nhìn và lưu lại, chỉ là những gì tôi cần! – eftpotrm

+0

@eftpotrm - Ah tôi có một cách tốt hơn bây giờ. [Đây là một liên kết] (http://stackoverflow.com/a/16520904/73226) –

+0

Cảm ơn - Tôi đã kết thúc với một yêu cầu hơi khác vì vậy điều đó không hoàn toàn phù hợp với tôi, tôi nghĩ vậy. Đáng tiếc :-) Thêm tôi như một câu trả lời trong một mo. – eftpotrm

3

Dựa tắt câu trả lời Martin Smith trên nhưng khái quát hóa thành một cái nhìn để cung cấp cho một loại cross-DB phiên bản của 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) 

Bây giờ, nếu duy nhất tôi có thể làm việc ra một cách để làm tương tự cho các cột .......

EDIT - Bỏ qua điều này, việc tìm kiếm đôi khi bỏ qua các bảng hoàn toàn.

Các vấn đề liên quan