我正在一个具有多个上下文的项目中工作,因为数据是从不同的数据库中提取的。
我们大约有数百个数据库,一个数据库也有数百个表,因此要遍历许多数据库来查找表是很费力的。
我只有这样的代码才能通过列名从特定数据库中查找表名:
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>
预先感谢
答案 0 :(得分:1)
尝试此查询并根据需要进行修改。您只需要在查询中传递列名,这将列出所有表和数据库名。
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' )
答案 1 :(得分:0)
问题:由于文件不可访问或内存或磁盘空间不足,无法打开消息945,级别14,状态2,第2行,数据库“ WJ ..”。我使用“ Master”运行
修复/解决方案/解决方法:
1)如果可能,通过从硬盘驱动器中删除不必要的文件或添加更大尺寸的新硬盘来增加硬盘驱动器空间。
2)检查数据库是否设置为自动增长。
3)检查试图访问数据库的帐户是否具有足够的权限来执行操作。
4)确保在操作系统文件系统级别上未将.mdf
和.ldf
文件标记为只读。