我必须加入来自多个数据库的查询,例如:
SELECT T1.*, T2.* FROM DatabaseA.dbo.Table1 AS T1
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID
我的问题:
System.Data.SqlClient.SqlConnection
的连接字符串?我应该省略或留空Initial Catalog
吗?我应该将其设置为DatabaseA
吗?SELECT
视图的第三个数据库(我不能在现有数据库中放置视图)。查询通常在10/15秒内执行,但是用户必须等待,否则将会减少几秒钟。所有数据库共享相同的登录凭据。
答案 0 :(得分:2)
这取决于连接字符串中的登录多于Initial Catalog
。
您可以在连接字符串中指定任一数据库,只要您使用的登录具有从两个数据库中的两个表进行查询所需的权限。
跨越多个数据库的查询没有任何内在错误,因此您提出的解决方案对我来说很好。
请注意,如果您是设计这些数据库的人,并确定哪些表应该存在于哪些数据库中,那么跨数据库就没有参照完整性,所以理想情况下,任何相互关联的表都应该存在一个数据库。
答案 1 :(得分:1)
连接字符串使用用户名的权限连接到DB,而不管数据库是什么。如果用户有权执行查询,则根本不会有任何问题。
答案 2 :(得分:1)
初始目录将是您在不使用DBNAME.dbo.TABLENAME的情况下查询的目录。 因此,如果您选择DatabaseA作为初始目录,则可以像这样查询:
SELECT T1.*, T2.*
FROM Table1 AS T1
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID
初始目录仅表示默认数据库。
如果登录有权访问这两个数据库,则在使用全名时,哪一个是默认值无关。
<强>性能:强> 10/15秒听起来很长一段时间。您应该能够通过使用索引或更好的查询设计来改进查询并将其降低。尽管如此,制作观点并不能改善延迟。 如果您需要一些帮助,请提供更多详细信息。