use*_*599 5 sql-server-2008 oracle sql-server import linked-server
我有一个 SQL Server 2008 实例,我想用它从 Oracle 服务器导入数据。
我已经设置了一个链接服务器,它在运行像SELECT * FROM table
. 但是,如果我声明一个变量或循环遍历表中的行或OPENQUERY
.
是否可以使用OPENQUERY
? 我需要额外的权限吗?
Pau*_*ite 10
您可能会看到如下错误:
Msg 7357, Level 16, State 1, Line xx
Cannot process the object "<query text>".
The OLE DB provider "<provider>" for linked server "<server>" indicates that either
the object has no columns or the current user does not have permissions on that object.
Run Code Online (Sandbox Code Playgroud)
当 SQL Server 尝试发现OPENQUERY
语句返回的数据的形状时,就会发生这种情况。这里有许多引人入胜的细节,但结果是OPENQUERY
通常最好只使用一个SELECT
语句,就像联机丛书中的所有示例一样。
可以使用 做其他事情OPENQUERY
,包括执行远程存储过程,但该过程应该只返回一个结果集,并且在此之前应该没有任何事情SELECT
可能会破坏 SQL Server 检查结果集形状的方式。
另一种方法是使用EXECUTE ... AT
,例如:
DECLARE @Script nvarchar(max) =
N'
<some amazing script>
';
EXECUTE (@Script) AT <linked_server_name>
Run Code Online (Sandbox Code Playgroud)
有关完整的语法和选项,请参阅联机丛书。
您可能需要将链接服务器的服务器选项属性Enable promotion of distributed transactions for RPC
设置false
为使用以下方法在表中捕获结果:
INSERT <table> (columns)
EXECUTE (@Script) AT <linked server>;
Run Code Online (Sandbox Code Playgroud)
请注意,这可能效率低得多,因为 的结果EXECUTE
在被提供给INSERT
. 如果结果很大,这可能会有问题。
归档时间: |
|
查看次数: |
17144 次 |
最近记录: |