العثور على جدول عبر قواعد بيانات متعددة SQL SERVER 2005
-
03-07-2019 - |
سؤال
وصدرت لي جدول إلى الخادم ولكن لا يمكنني العثور على الجدول. ربما لم أضع قاعدة البيانات الوجهة الصحيحة. كيف يمكنني العثور على هذا الجدول إذا كان الخادم بلدي لديه قواعد بيانات متعددة، دون الحاجة إلى فتح كل واحد منهم؟
و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 ''?''
'