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
файл не помечен как доступный только для чтения на уровне файловой системы операционной системы.