当前位置: 首页 > 知识库问答 >
问题:

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

杨凯旋
2024-06-26

接手的老项目,其中有一条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库 指定是设置了什么配置

共有2个答案

谢英耀
2024-06-26

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

柴瀚昂
2024-06-26

在 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库的表];
 类似资料:
  • 问题内容: 我正在寻找一种处理以下情况的方法: 我们有一个数据库服务器,上面有多个数据库(所有数据库都有相同的架构,不同的数据)。 我们正在寻找一种查询所有数据库的方法(并且它易于配置,因为可以随时添加更多数据库)。此数据访问必须是实时的。 举例来说,假设您有一个插入订单的应用程序- 每个应用程序都有自己的数据库等。我们正在寻找的是一种有效的方式,使单个应用程序可以访问所有其他数据库中的订单信息,

  • 问题内容: 我在各自的数据库中都有WordPress实例。要进行更新,我需要查询所有活动插件,这些插件存储在表“ wp_options”中,可通过以下方式访问 如何访问 所有 活动的插件设置(分布在多个数据库中)并将其输出到一个SQL结果中?我知道语法,但是如何使用上面的语句从那里继续? 单个数据库中的请求如下所示: 问题答案:

  • 问题内容: 我试图通过在经典ASP中查询2个数据库(Sybase)来生成报告。 我创建了2个连接字符串: 数据库 A的connA数据库B的connB 两个数据库都位于同一台服务器上(不知道这是否重要) 查询: 其次是: 当我尝试在浏览器中打开此页面时,出现错误消息: Microsoft OLE DB提供程序的ODBC驱动程序错误‘80040e37’ 找不到[DataDirect] [ODBC Sy

  • 简介 Laravel 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它能用来执行应用程序中的大部分数据库操作,且可在所有支持的数据库系统上运行。 Laravel 的查询构造器使用 PDO 参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串。 获取结果 从数据表中获取所有行 你可以 DB facade 上使用 table 方法来开始查询。该 tab

  • 本文向大家介绍oracle跨库查询的方法,包括了oracle跨库查询的方法的使用技巧和注意事项,需要的朋友参考一下 在Oracle本地数据库端执行赋权dbuser帐号 SQL> grant create database link to dbuser; 1.配置本地数据库服务器的tnsnames.ora文件 添加如下行,其中DBLINK为连接名(可自定义),HOST和PORT为数据库侦听的IP及端

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类

  • 问题内容: 我刚刚发现了信息,我只是在检查是否有与项目中的一些朋友一起遇到约束的想法,尽管这更多是我一直在尝试找到的理论问题一个答案一段时间。 我不太喜欢密码学,但是如果我不够清楚,我将尝试编辑/评论以澄清任何问题。 简而言之,环境是这样的: 前端用于访问加密/解密密钥,后端用于存储和查询的应用程序。 例如,有一个您无法访问几个字段的数据库,让我们说“地址”,它通常是文本/ varchar。 您无

  • 必须要指定字段名么?不能类似 PHP 那样写了 SQL 直接用么