sqlserver 2个数据库在一台服务器上,跨库查询问题,想a库查询b库的表?

接手的老项目,其中有一条sql是 'select * from a库.dbo.b库的表' 这个条sql在原库上是可以查询的。

现在有一台新的服务器要迁移数据,我同样创建了两个库 但我执行 'select * from a库.dbo.b库的表'这个sql时,提示找不到。

这说明原库上做了某些设置,不知道如何解决了。
同时a库能查询b库的所有表 ,b库不能查询a库的表。 求助
(a库是没有b库的表的)

想知道怎么设置一下,如何设置。

碰到的问题如下
a库有aa表 b库有bb表
select * from a.dbo.bb 结果:可以查到

select * from b.dbo.bb 结果:当然可以查到

select * from b.dbo.aa 结果:不行 [42S02] Microsoft[SQL Server]对象名 'b.dbo.aa' 无效。 (208)

所以a库 指定是设置了什么配置

问题得到解决:查看sqlserver数据库同义词的概念,在相关库下面创建同义词即可(耗费多时才找到的答案)

阅读 1.3k
avatarAI BotBETA

在 SQL Server 中,跨数据库查询(也称为跨库查询)通常是通过完全限定名称来完成的,格式如 SELECT * FROM [DatabaseName].[SchemaName].[TableName]。但有几个方面需要注意,特别是当你从一个服务器迁移到另一个服务器时。

问题诊断

  1. 数据库名称和表名是否正确:确保你在新服务器上使用的数据库名称和表名与旧服务器上完全相同(包括大小写,因为 SQL Server 在某些配置下是区分大小写的)。
  2. 登录和权限:确保你的 SQL Server 登录名在新服务器上具有足够的权限来访问两个数据库。在 SQL Server 中,权限是基于登录名和数据库用户的,而不是基于服务器的。
  3. 链接服务器:如果旧系统实际上使用了链接服务器来查询另一个数据库(虽然这不太可能是你描述的情况),那么你需要在新服务器上设置相应的链接服务器。
  4. 默认数据库:在某些情况下,如果 SQL Server 登录名的默认数据库不是 a库,你可能需要明确指定数据库名称。

解决方案

  1. 验证名称和大小写

    • 使用 SELECT name FROM sys.databases; 来列出新服务器上的所有数据库,确保 a库b库 存在且名称正确。
    • 使用 SELECT name FROM a库.sys.tables; 来列出 a库 中的所有表,确保 b库的表 存在且名称正确(注意 SQL Server 默认不区分大小写,但某些配置可能会改变这一点)。
  2. 设置权限

    • 使用具有足够权限的登录名(例如 sa)登录到新服务器。
    • 确保你的登录名在 a库b库 中都有用户,并且这些用户有足够的权限来执行查询。你可以使用 USE [DatabaseName]; CREATE USER [UserName] FOR LOGIN [LoginName]; 来创建用户,并使用 ALTER ROLE [RoleName] ADD MEMBER [UserName]; 来分配角色(如 db_datareader 用于读取权限)。
  3. 使用完全限定名称

    • 始终使用完全限定名称来执行跨库查询,以避免任何混淆或误解。例如:SELECT * FROM [a库].[dbo].[b库的表];
  4. 检查默认数据库

    • 如果你的登录名的默认数据库不是 a库,你可能需要在查询中明确指定数据库名称。
  5. 其他配置

    • 如果上述步骤都不能解决问题,检查 SQL Server 的其他配置设置,如排序规则、兼容性级别等,以确保它们与旧服务器上的设置相匹配。

示例 SQL 语句

创建用户并分配权限(以 sa 登录名为例):

USE [a库];
CREATE USER [YourLoginName] FOR LOGIN [YourLoginName];
ALTER ROLE [db_datareader] ADD MEMBER [YourLoginName];

USE [b库];
CREATE USER [YourLoginName] FOR LOGIN [YourLoginName];
ALTER ROLE [db_datareader] ADD MEMBER [YourLoginName];

执行跨库查询:

SELECT * FROM [a库].[dbo].[b库的表];
2 个回答

查看sqlserver同义词概念

查询不出来请展示具体错误,应该是账户权限不足

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏