sql найти базу данных таблицы mssql

Я работаю над проектом, который имеет несколько контекстов, потому что данные извлекаются из разных баз данных.

У нас есть около сотни баз данных, в одной базе данных тоже есть сотни таблиц, поэтому поиск множества баз данных - это кропотливая работа.

У меня есть только код для поиска имени таблицы из конкретной базы данных по имени столбца, например:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%mycolumn%'
ORDER BY    TableName
            ,ColumnName;

Но иногда я уже знаю имя таблицы, но не знаю, к какой базе данных она принадлежит. Кто-нибудь может указать мне правильный код?

ОБНОВИТЬ:

Я хотел сказать, база данных. для более ясного объяснения вот наша строка подключения, как вы можете видеть, я только что добавил несколько баз данных.

Но он может расти в зависимости от того, какие данные нам нужны в наших кодах. Мне нужно имя базы данных, которое будет служить моим контекстом (я использую dbscopecontext), а также иметь возможность запрашивать, как это

select * from [MyDatabase].[dbo].[MyTable]

Потому что просто выбор из панели запросов, как показано ниже, дает ошибку.

select * from [dbo].[MyTable] 


    <add name="EContext" connectionString="server; Database=E;  providerName="System.Data.SqlClient" />
    <add name="MContext" connectionString="server; Database=M;  providerName="System.Data.SqlClient" />
    <add name="AContext" connectionString="server; Database=A;  providerName="System.Data.SqlClient" />
    <add name="BaContext" connectionString="server; Database=B;  providerName="System.Data.SqlClient" />
    <add name="WConntextntext" connectionString="server; Database=W;  providerName="System.Data.SqlClient" />
    <add name="WpContext" connectionString="server; Database=Wp;  providerName="System.Data.SqlClient" />
    <add name="Maontext" connectionString="server; Database=MA;  providerName="System.Data.SqlClient" />
    <add name="BlsContext" connectionString="server; Database=Bls;  providerName="System.Data.SqlClient" />
    <add name="BiContext" connectionString="server; Database=Bi;  providerName="System.Data.SqlClient" />
</connectionStrings>      

заранее спасибо

2 ответа

Попробуйте этот запрос и измените в соответствии с вашими потребностями. Все, что вам нужно, чтобы передать только имя столбца в запросе, и это будет список всех таблиц и имен баз данных.

DECLARE @SysQuery NVARCHAR(MAX)
DECLARE @columnName NVARCHAR(100) = 'EmailID'
SELECT
    @SysQuery = isnull(@SysQuery+N' UNION ALL ',N'')+
'
SELECT [Database] = convert(sysname,'''+a.name+
'''), [Table] = a.name collate SQL_Latin1_General_CP1_CI_AS from '+quotename(a.name)+'.sys.tables a 
INNER JOIN' +quotename(a.name)+'.sys.columns c ON  c.OBJECT_ID = a.OBJECT_ID AND c.name like ''%'+@columnName+'%'''
FROM
    sys.databases a
PRINT @SysQuery

EXEC ( @SysQuery+ ' ORDER by 1,2' )

Проблема: Сообщение 945, Уровень 14, Состояние 2, Строка 2, База данных "WJ.." не может быть открыта из-за недоступных файлов или из-за недостатка памяти или места на диске. Я запустил ее, используя "Мастер"

Исправление / Решение / Обходные пути:

1) Если возможно, добавьте больше места на жестком диске, либо удалив ненужные файлы с жесткого диска, либо добавьте новый жесткий диск большего размера.

2) Проверьте, не установлена ​​ли для базы данных значение Autogrow on.

3) Проверьте, имеет ли учетная запись, которая пытается получить доступ к базе данных, достаточно разрешений для выполнения операции.

4) Убедитесь, что .mdf а также .ldf файл не помечен как доступный только для чтения на уровне файловой системы операционной системы.

Другие вопросы по тегам