sql найти базу данных таблицы mssql - PullRequest
0 голосов
/ 15 ноября 2018

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

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

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

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 ]

0 голосов
/ 15 ноября 2018

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

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

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

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

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

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

0 голосов
/ 15 ноября 2018

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

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' )
...