sql跨数据库查询方法

数据库教程1:AAA
数据库2:BBB

数据库名和表名之间放两个点

 

select * from [AAA]..TableA a inner join [BBB]..TableB b on a.AcountID = b.ClientID

注意:必须是单个Sql实例!

你要知道跨数据库访问的语法,如下:
select * from openrowset('sqloledb','DRIVER={SQL Server};SERVER=服务器地址;UID=sa;PWD=密码', 数据库名.dbo.表名),

如果没有启用Ad Hoc Distributed Queries,查询结果是出错的,如下描述:
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

解决方法:

exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries',1reconfigure
然后执行查询,

select * from openrowset('sqloledb','DRIVER={SQL Server};SERVER=服务器地址;UID=sa;PWD=密码', 数据库名.dbo.表名)
执行完后,关闭Ad Hoc Distributed Queries

exec sp_configure 'Ad Hoc Distributed Queries',0reconfigureexec sp_configure 'show advanced options',0reconfigure

启用跨数据库所有权链接
--------------------------------------------------------------------------------

只能在完全信任高级权限用户的环境中启用跨数据库所有权链接。 可在设置所有数据库,或使用 Transact-SQL 命令 sp_configure 和 sp_dboption 选择性地设置特定数据库期间,配置跨数据库所有权链接。

SQL Server 2000 SP3 引入了 Cross DB Ownership Chaining 选项作为一项安全增强功能,它可允许您配置跨数据库所有权链接。 若要选择性地配置 SQL Server 2005 或更高版本中的跨数据库所有权链接,但该链接对于服务器未打开,请使用 sp_configure 打开该链接。 然后,使用包含 SET DB_CHAINING ON 的 ALTER DATABASE 命令仅为需要跨数据库所有权链接的数据库配置跨数据库所有权链接。

动态 SQL
在执行了动态创建的 SQL 语句的情况下跨数据库所有权链接将不起作用,除非同一用户同时存在于两个数据库中。 您可以通过创建访问另一数据库中数据的存储过程并使用存在于两个数据库中的证书对过程签名,在 SQL Server 2005 中解决此问题。 这可为用户提供访问该过程所使用的数据库资源的权限,而不必向他们授予数据库访问权或权限。

 

时间: 2024-10-24 00:32:20

sql跨数据库查询方法的相关文章

优化SQL Server数据库查询方法

SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源. 9.返回了不必要的行和列 10.查询语句不好,没有优

帝国cms和discuz论坛系统跨数据库查询调用

现在大多数资讯类系统,一般站长都比较青睐php.mysql组合,这类cms系统中以dede和帝国更为普及,在帝国系统中调用论坛数据,这个应用需求比较常见,cms和论坛系统使用同一数据库时,这样调用时,使用帝国论坛上提供的方法,如果是dede网站系统,使用dede的后台向导就可以直接实现,但如果cms和论坛使用不同的数据库,前提是在同一服务器.同一mysql服务环境下,就不能直接调用了,这涉及到mysql用户的多数据库权限,以及mysql的跨数据库查询问题. 这个问题很久以前就曾经多次在帝国论坛咨

mysql-PHP 跨数据库查询效率问题求助

问题描述 PHP 跨数据库查询效率问题求助 直接上代码: $sql = "select mrn from A where type=2"; //mysql数据库 $result = $dbFin->query($sql); while ($row = $result->fetch_assoc()) { $sqlPid = "select name from TestDB.dbo.B where pid= '{$row['mrn']}'"; //sql s

Symfony2使用Doctrine进行数据库查询方法实例总结_php实例

本文实例讲述了Symfony2使用Doctrine进行数据库查询方法.分享给大家供大家参考,具体如下: 预定义文中用到的变量: $em = $this->getDoctrine()->getEntityManager(); $repository = $em->getRepository('AcmeStoreBundle:Product') 1.基本方法 $repository->find($id); $repository->findAll(); $repository-&

如何使用SQL Server数据库查询累计值

本文介绍如何使用SQL Server数据库查询累计值,举例分析. 有这样一个要求,它要创建一个SQL Server查询,其中包括基于事件时刻的累计值.典型的例子就是一个银行账户,因为你每一次都是在不同的时间去存钱和取钱.对任意一个账户来说,在某个时间点都要算出它的借(存款)和贷(取款)之和.每一笔交易之后,你都想知道当前的余额. 列表A创建了这样一个表格的简单的例子. CREATETABLE [dbo].[BankAccount]([TransactionID] [int] IDENTITY(1

SQL Server数据库查询问题,感谢!!急急急

问题描述 SQL Server数据库查询问题,感谢!!急急急 这是数据库中的两张表,请问怎样使用SELECT将两张表做成 ID SUBSUM SUB 1234 0 3 3456 5 6 7777 0 0 9990 32 35 就是两张表中相同ID的subsum和sum相加 ,不同的ID不变. 解决方案 SELECT ID,SUM(SUBSUM) SUBSUM,SUM(SUB) SUM FROM ( SELECT ID,SUBSUM ,SUB FROM 表1 union all SELECT ID

go语言通过odbc访问Sql Server数据库的方法_Golang

本文实例讲述了go语言通过odbc访问Sql Server数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,开源地址为:https://github.com/weigj/go-odbc 复制代码 代码如下: package main; import (     "fmt"     "database/sql"     _"odbc/driver" ) func main(){     conn,err := sql.O

jsp简单连接SQL Server2000数据库的方法_JSP编程

本文实例讲述了jsp简单连接SQL Server2000数据库的方法.分享给大家供大家参考.具体如下: package util; import java.sql.Connection; import java.sql.DriverManager; public class ConnDB { public static String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; public static String u

ACCESS:跨数据库查询的SQL语句

access|数据|数据库|语句 问题说明:有时需要在两个或三个数据库的表中,通过相关关键字,查询获取所需记录集,用一般的SQL查询语句是实现不了的,可通过ACCESS的跨库查询功能实现.解决方法:例如"装材类型"和"装材"两张表是在不同的数据库中的,具体查询方法,如下:@"Select * from 装材类型 as a INNER JOIN [;database=" + AppDomain.CurrentDomain.BaseDirectory