数据库教程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 中解决此问题。 这可为用户提供访问该过程所使用的数据库资源的权限,而不必向他们授予数据库访问权或权限。