我知道以下查询将从链接服务器下拉结果集:
SELECT * FROM openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
Run Code Online (Sandbox Code Playgroud)
但是,在插入时这是同样的情况吗?它会下拉结果集还是仅获取列信息?
INSERT INTO openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
Run Code Online (Sandbox Code Playgroud)
如果是前者,那么这是非常低效的.我应该限制返回的结果集,这会影响我INSERT吗?
这基本上是如何的一个问题OPENQUERY,当谈到工作SELECT和INSERT.
我感谢任何帮助.
我有一个本地SQL Server 2008R2.我已将Linked Server配置为远程数据库.
当我使用具有sysadmin服务器角色的SQL登录帐户登录本地服务器时,链接服务器工作正常.我可以查询远程服务器,所以我知道链接服务器设置是正确的.但是,如果我使用没有sysadmin服务器角色的帐户,我会收到以下错误.
Msg 7416, Level 16, State 2, Line 2
Access to the remote server is denied because no login-mapping exists.
Run Code Online (Sandbox Code Playgroud)
对于本地和远程服务器,使用SQL登录(不使用Windows身份验证)
我需要为常规SQL登录帐户配置哪种安全性才能使用链接服务器?
我想在本地服务器上插入一些数据到远程服务器,并使用以下sql:
select * into linkservername.mydbname.dbo.test from localdbname.dbo.test
Run Code Online (Sandbox Code Playgroud)
但它会引发以下错误
对象名称"linkservername.mydbname.dbo.test"包含的前缀数量超过最大数量.最大值为2.
我怎样才能做到这一点?
我使用链接服务器在远程Sql Server中插入记录,现在我想获取插入记录的ID.类似于scope_identity()本地服务器的东西.我的远程sql server是2000版.
我看过这篇文章,但我无法在远程sql server中添加任何存储过程
我有一个名为MyTableon 的表,我已经定义了一个触发器,如下所示:
CREATE TRIGGER dbo.trg_Ins_MyTable
ON dbo.MyTable
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
insert SomeLinkedSrv.Catalog.dbo.OtherTable
(MyTableId, IsProcessing, ModifiedOn)
values (-1, 0, GETUTCDATE())
END
GO
Run Code Online (Sandbox Code Playgroud)
每当我尝试插入一行时MyTable,都会收到以下错误消息:
Msg 3910,Level 16,State 2,Line 1事务上下文,由另一个会话使用.
我已SomeLinkedSrv正确定义为链接服务器(例如,select * from SomeLinkedSrv.Catalog.dbo.OtherTable工作正常).
如何避免错误并成功插入记录+执行触发器?
我有一组查询需要使用不同的参数多次运行,所以我把它包装在一个表值函数中.
需要从远程服务器调用该表值函数.不幸的是,链接服务器上的调用失败并出现错误:
Msg 4122, Level 16, State 1, Line 29
Remote table-valued function calls are not allowed.
Run Code Online (Sandbox Code Playgroud)
Microsoft已承认"远程调用表值函数"是SQL Server 2008中遗漏的一项功能.请参阅:http://connect.microsoft.com/SQLServer/feedback/details/276758/remote-table-valued-function -calls-是-不被允许
我发现了一种使用OPENQUERY语法的解决方法,它允许查询在远程服务器上本地运行,然后返回结果集.请参阅:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/7a6e4aa1-630b-4ad5-aee5-15139987adbd
不幸的是,这个解决方法需要一个解决方法,因为它需要一个字符串作为参数,这意味着你不能使用OPENQUERY语法传递一个变量,你甚至不能在其中连接一个字符串,就像你想要包含你的变量一样想要传递给远程表值函数.解决方法的解决方法是使用动态SQL显式构建OPENQUERY查询,确保将正常的字符串传递给它.请参阅:http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/0847ad24-0dfe-4ae1-9788-5516c7830f40/
然而,另一个问题是由此产生的.即使确保所有引号和双引号和四引号都正确嵌入,因此整个事件可以通过exec sp_executesql传递,但仍然存在问题:
当查询最终调用表值函数时,我得到错误:
OLE DB provider "SQLNCLI10" for linked server "MY_REMOTE_SERVER_NAME" returned message "Deferred prepare could not be completed.".
Msg 7416, Level 16, State 1, Procedure MyTableValuedFunctionName, Line 22
Access to the remote server is denied because no login-mapping exists.
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我收到此错误,因为我的用户名存在映射,如果我只是用实际表替换表值函数,它会返回结果.OPENQUERY语句出现问题,无论是否使用sp_executesql执行,并且正如我所说,它只在调用表值函数时发生.
任何想法如何解决这个问题?
permissions linked-server openquery sql-server-2008 sp-executesql
我正在尝试使用查询MySQL链接服务器SQL Server.
以下查询运行正常.
SELECT * FROM OPENQUERY([Linked_Server], 'SELECT * FROM Table_Name')
Run Code Online (Sandbox Code Playgroud)
是否可以在不使用OpenQuery调用的情况下运行相同的查询?
我有一个大问题:我必须连接(我只想读取数据,而不是写入)到我的客户的IBM AS/400(也就是iSeries,现在是IBM i)服务器......
我想我需要所有参数(由AS/400程序员给我),但我无法弄清楚我必须使用哪个驱动程序,以及我是否需要所有软件!
我已经安装了IBM AS/400 ClientAccess 5.8驱动程序(带有最新操作系统的补丁),现在我正在尝试Linked Server在我的Sql Server 2008 R2(x64)服务器中配置一个新的.
第一个问题:我应该使用哪个驱动程序?
我有很多选择(但也许这些都没有!):
IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider
IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider
IBM DB2 UDB for iSeries IBMDARLA OLE DB Provider
Run Code Online (Sandbox Code Playgroud)
......或者其他通用OLEDB/ODBC驱动程序?!
第二个问题:我应该在哪里放置参数(我的意思是哪个字段!)
无论如何,在我为我选择一个提供者时Linked Server,显然我必须设置我的参数......但我只有这个:
ACG_DATV2)第三个问题:我该如何撰写查询?如何引用AS/400"存档"和表?
我不知道如何构建我的阅读查询:表和视图(?!)存储在哪里以及如何引用它们?
先感谢您!
sql-server oledb database-connection linked-server ibm-midrange
在localserver(SQL Server 2008 R2)上,我有一个名为syn_view1指向链接服务器的同义词remoteserver.remotedb.dbo.view1
此SLOW查询需要20秒才能运行.
select e.column1, e.column2
from syn_view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Run Code Online (Sandbox Code Playgroud)
此FAST查询需要1秒才能运行.
select e.column1, e.column2
from remoteserver.remotedb.dbo.view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Run Code Online (Sandbox Code Playgroud)
两个查询的唯一区别实际上是同义词的存在.显然,同义词会影响查询的性能.
SLOW查询的执行计划是:
Plan Cost % Subtree cost
4 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 3.3521
3 Filter
I/O cost: 0.000000 CPU cost: 0.008800 Executes: 1
Cost: 0.008800 …Run Code Online (Sandbox Code Playgroud) sql-server performance linked-server synonym sql-server-2008-r2
更新:问题是col1是hiereachyid类型,甚至一个选择没有工作.
大家好,
我收到此错误 -
在分布式查询中不允许使用CLR类型公开列的对象.请使用传递查询来访问远程对象"RemoteDb"."dbo"."RemoteTable"'.
我已经设置了链接服务器[RemoteServer.dev.com].我试图从远程表执行批量插入到当前表中这样的事情 -
INSERT INTO [CurrentDb].[dbo].[Mytable]
(
col1,
col2
)
SELECT
col1,col2
FROM [RemoteServer.dev.com].[RemoteDb].[dbo].[RemoteTable]
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮帮我..谢谢.
linked-server ×10
sql-server ×8
insert ×2
mysql ×2
openquery ×2
t-sql ×2
ibm-midrange ×1
odbc ×1
oledb ×1
performance ×1
permissions ×1
security ×1
sql ×1
synonym ×1
triggers ×1