用于链接服务器的链接服务器 OLE DB 提供程序“SQLNCLI11”

问题描述 投票:0回答:2

您好,我有 2 个不同的 SQL Server 数据库。

它们通过链接服务器相互连接。链接服务器工作正常。

当我尝试时:

SELECT 
    * 
FROM 
    OPENQUERY
        ([192.168.1.170], 
        'SELECT MalCRM.dbo.ContractedNumber(1)')

我收到以下错误。我该如何解决它?

链接服务器“192.168.1.170”的 OLE DB 提供程序“SQLNCLI11”返回消息“无法完成延迟准备。”。 消息 229,第 14 级,状态 5,第 1 行 对象“ContractedNumber”、数据库“MalCrm”、架构“dbo”的 EXECUTE 权限被拒绝。

sql-server t-sql dynamic-sql openquery
2个回答
3
投票

梅尔哈巴·贝尔汉,

我尝试了以下 sql 查询,效果很完美

SELECT * FROM OPENQUERY([myInstance], 'SELECT AdventureWorks.dbo.test(3)')

您检查数据库功能上的凭据是否有效? 这似乎是一个权限问题。 请检查SQL Server链接服务器安全上下文并检查它是否具有数据库对象的执行权限。 在提到的教程中,在安全上下文中,您可以将源数据库用户映射到链接服务器上的其他用户。 可能是这个问题


0
投票

就我而言,权限是完美的,我可以通过 OpenQuery 访问表,但直接选择是行不通的。所以

select * from MyLinkedServer.Database.dbo.Table

会给我

Msg 7313, Level 16, State 1, Line 1
An invalid schema or catalog was specified for the provider "SQLNCLI11" for linked server "MyLinkedServer".

但是如果我这样做了:

select * from OPENQUERY([MyLinkedServer], 'SELECT * from Database.dbo.Table')

效果很好。如果我直接使用链接服务器用户使用的帐户登录,我还可以在源服务器上很好地查询表。

我的情况的问题是,表名称末尾有一个(无效)空格和/或其他高位 ASCII 字符,显然链接服务器连接必须对名称严格,而其他查询则不然(我确信某处有一篇关于此的文章,但我懒得去找它)。

无论如何,我通过右键单击对象管理器中链接服务器下的表并单击“将表脚本为... --> 选择到”来解决这个问题,这将编写选择脚本并显示选择需要是

select * from [MyLinkedServer].[Database].[dbo].[Table ]

(注意“e”和“]”之间的空格)

© www.soinside.com 2019 - 2024. All rights reserved.