如果我想在SQL Server中运行此类查询,如何从一个连接到另一个服务器的服务器执行相同的查询?
我尝试添加"[ServerName1]." 在"[DatabaseName1].[dbo] ..."和"[ServerName2]."之前.在"[DatabaseName2].[dbo] ..."之前,但这似乎不起作用.
INSERT INTO [DatabaseName1].[dbo].[TableName]
([FieldName])
SELECT [FieldName] FROM [DatabaseName2].[dbo].[TableName]
Run Code Online (Sandbox Code Playgroud)
这可能吗?
在SQL Server 2008(版本10.0.4000)中,我已经创建了一个到Active Directory服务器的链接服务器.
这个查询:
select TOP 901 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
Run Code Online (Sandbox Code Playgroud)
作品.
但是,更改查询并尝试检索902行不会:
select TOP 902 *
from openquery(adsisca, '
select givenName,
sn,
sAMAccountName
from ''LDAP://10.1.2.3:389''
where objectCategory = ''Person''
and
objectClass = ''InetOrgPerson''
')
Run Code Online (Sandbox Code Playgroud)
错误是:
消息7330,级别16,状态2,行1无法从OLE DB提供程序"ADSDSOObject"获取链接服务器"adsisca"的行.
我发现其他人在论坛上讨论相同的问题,他们从来没有修复它,只是围着它编写多个视图并将它们联合在一起.
是否有一个更优雅的修复,是否有一个设置,我可以在某处更改以检索超过901行?
是否有可能知道如何/是否可以查看依赖于Sql Server 2008中链接服务器的所有表/视图/存储过程.基本上好像链接服务器可以访问上下文菜单"查看依赖关系"?
任何帮助非常感谢.
谢谢
是否可以将远程存储过程的结果插入临时表?例如
CREATE TABLE #test(id INT)
INSERT INTO #test
EXEC [linkedserver].remoteDB.dbo.tst
DROP TABLE #test
Run Code Online (Sandbox Code Playgroud)
其中tst是返回ID的存储过程.
如果我自己运行exec它工作正常
EXEC [linkedserver].remoteDB.dbo.tst
Run Code Online (Sandbox Code Playgroud)
但是当我把它作为插入的一部分时,我得到了这个错误
" OLE DB提供程序"SQLNCLI"用于链接服务器"linkedserver"返回消息"伙伴事务管理器已禁用其对远程/网络事务的支持.".消息7391,级别16,状态2,行2无法执行操作,因为链接服务器"linkedserver"的OLE DB提供程序"SQLNCLI"无法启动分布式事务. "
一台机器运行SQL Server 2005,另一台机器运行"分布式事务协调器"服务.
我有一台服务器SourceServer我连接到它有一个链接服务器TargetServer.
插入语句应该如何(我需要引用链接服务器,数据库,命名空间,表):
//Connected to [SourceServer]
USE [SourceDatabase]
DECLARE @HelloWorld NVARCHAR(255)
SELECT @HelloWorld = Name From dbo.Names where Id = 1
INSERT INTO [TargetServer].[TestDatabase].dbo.TestTable (Name) VALUES (@HelloWorld)
Run Code Online (Sandbox Code Playgroud)
此语句以异常执行:
Too many prefixes.
Run Code Online (Sandbox Code Playgroud)
更新:上面的语法工作正常,问题是用于连接到链接服务器的sql用户的密码过期:)
假设我的本地表有一个表Local_Table,我有另一个服务器和另一个数据库和表,这是Remote_Table(表结构是相同的).
Local_Table有数据,Remote_Table没有.我想从数据传输Local_Table到Remote_Table与此查询:
Insert into RemoteServer.RemoteDb..Remote_Table
select * from Local_Table (nolock)
Run Code Online (Sandbox Code Playgroud)
但表现相当缓慢.
但是,当我使用SQL Server导入导出向导时,传输速度非常快.
我究竟做错了什么?为什么使用Import-Export向导会很快,而使用insert-select语句会很慢?有任何想法吗?
我正在增强现有的Java应用程序.2个不同的DB2数据库中有数据.该应用程序已经从2个不同的数据库中获取数据,但它始终从一个数据库进行查找,然后执行另一个 有没有办法使用一个SQL SELECT连接来自2个不同DB2数据库的数据?
这是我试过的:
CREATE ALIAS remote_orders FOR remote_db.schema.orders;
select *
from myid.remote_orders a
inner join local_schema.parts b on (a.key = b.key)
with ur FETCH FIRST 200 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID. SQLCODE=-512, SQLSTATE=56023, DRIVER=4.14.113
Run Code Online (Sandbox Code Playgroud)
我可以用临时表做点什么吗?我可以运行这个选择没有错误,但它对我没有帮助......(还)
select *
from myid.remote_orders
with ur FETCH FIRST 200 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
编辑:
一个DB2临时表可能会有所帮助.我能够创造一个.现在我需要(去睡觉)并尝试选择它然后做我的加入.
我尝试访问 SSMS 中的 Excel 文件。在互联网上搜索后,我无法让它工作。
这是我所做的:
我的环境:
Windows 7(64bit) SP 1,
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)
Office 2010 Pro Plus with Access installed(32 bit)
Run Code Online (Sandbox Code Playgroud)
尝试更改 OLE 的配置,例如:
exec sp_configure 'Advanced', 1
RECONFIGURE
exec sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
Run Code Online (Sandbox Code Playgroud)运行查询:
SELECT * FROM OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
Run Code Online (Sandbox Code Playgroud)
或者
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
Run Code Online (Sandbox Code Playgroud)对于这两种情况,我都收到了一条错误消息,例如:
Msg 7308, Level 16, State 1, Line 1
OLE DB …Run Code Online (Sandbox Code Playgroud) 需要一些关于以下问题的帮助:
案例1:存储过程在服务器1上 - 来自server1的调用
declare @tempCountry table (countryname char(50))
insert into @tempCountry
exec [database1_server1].[dbo].[getcountrylist]
Select * from @tempCountry
Run Code Online (Sandbox Code Playgroud)
结果:成功执行
案例2:如果使用链接服务器从不同的服务器调用相同的存储过程,如下所示:
declare @tempCountry table (countryname char(50))
insert into @tempCountry
exec [database2_server2].[database1_server1].[dbo].[getcountrylist]
Select * from @tempCountry
Run Code Online (Sandbox Code Playgroud)
结果
消息7391,级别16,状态2,行2
无法执行操作,因为linkedserver"Server2_Database2"的OLEDB提供程序"SQLNCLI"无法启动分布式事务.
案例3
但是当试图单独执行存储过程[没有临时表插入]如下所示
exec [database2_server2].[database1_server1].[dbo].[getcountrylist]
Run Code Online (Sandbox Code Playgroud)
结果:正在执行存储过程而没有任何错误并返回数据.
我忘了提到我正在使用SQL Server 2005.根据服务器管理员的说法,我建议使用的功能在2005年不可用.
我有一张Table1关于SQL Server 2014和MySQL 的表.
Table1
ID INT,Code VARCHAR(100)
Run Code Online (Sandbox Code Playgroud)
我MyLinkedServer使用"Microsoft OLEDB Provider for ODBC"在SQL Server中创建了一个链接服务器.
**链接服务器**
EXEC master.dbo.sp_addlinkedserver @server = N'MyLinkedServer', @srvproduct=N'MyLinkedServer', @provider=N'MSDASQL', @datasrc=N'MyLinkedServer'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MyLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
Run Code Online (Sandbox Code Playgroud)
链接服务器设置
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'data access', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'MyLinkedServer', @optname=N'remote proc transaction promotion', @optvalue=N'true'
Run Code Online (Sandbox Code Playgroud)
链接服务器已成功创建,我可以在SQL Server中查询Mysql表.
询问
我跑的时候
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
Run Code Online (Sandbox Code Playgroud)
记录已插入.但是,当我启动一个事务并运行时INSERT,我收到一个错误:
BEGIN TRAN
INSERT INTO MyLinkedServer...Table1(ID,Code) SELECT 1,'Code1'
COMMIT
Run Code Online (Sandbox Code Playgroud)
错误:
链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"返回消息"[MySQL] [ODBC 5.3(a)驱动程序]不支持可选功能".消息7391,级别16,状态2,行8无法执行操作,因为链接服务器"MyLinkedServer"的OLE DB提供程序"MSDASQL"无法启动分布式事务.
到目前为止我尝试过的.
在MSDTC中启用XA事务 …
linked-server ×10
sql-server ×7
sql ×3
db2 ×1
dependencies ×1
insert ×1
mysql ×1
oledb ×1
t-sql ×1