العثور على جدول عبر قواعد بيانات متعددة SQL SERVER 2005

StackOverflow https://stackoverflow.com/questions/610609

سؤال

وصدرت لي جدول إلى الخادم ولكن لا يمكنني العثور على الجدول. ربما لم أضع قاعدة البيانات الوجهة الصحيحة. كيف يمكنني العثور على هذا الجدول إذا كان الخادم بلدي لديه قواعد بيانات متعددة، دون الحاجة إلى فتح كل واحد منهم؟

وI استخدام Studio MS SQL Server إدارة 2008.

هل كانت مفيدة؟

المحلول

وخشنة وقذرة، ولكن سيكون قيام بهذه المهمة.

-- 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 

والقائم قبالة الجواب مارتن سميث أعلاه ولكن المعمم في طريقة عرض لإعطاء نوع من عبر DB-نسخة من 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 ''?''
'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top