设置SSMS链接到DB2的服务器

lrl1mhuk  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(179)

我有一个本地SQL Server示例,在该示例上创建了一个指向名为“DB2OurDatabase”的DB2数据库的链接服务器连接。在创建链接服务器连接时,我指定了一个UID和PWD,我在各种查询工具或应用程序中使用它们来查询“[SchemaX].[TableX]”。
我似乎已成功创建链接服务器:在SSMS中的Linked Server节点下创建了一个名为“DB2OurDatabase”的Linked Server节点对象,当我展开它时,可以看到数据库中表的。
当我用鼠标右键单击[SchemaX].[TableX]表并选择
“编写表脚本为=〉选择到==〉新建窗口”,将打开一个新的查询窗口,其中包含文本

--[DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX] 
contains no columns that can be selected or the current user does not have permissions on that object.
GO

我不明白我是如何能够创建一个链接服务器,可以看到数据库中的表名,但显然似乎遇到了什么似乎是缺乏查询表的权限,即使我使用相同的凭据,我在SquirellSQL查询工具中使用,例如,查询表。
在SSMS中,我尝试执行此操作

SELECT * 
FROM [DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX]

错误:
消息7314,级别16,状态1,行1
链接服务器“DB2OurDatabase]”的OLE DB访问接口“IBMDADB2”不包含表““DataCenterCityName2_DB2OurDatabase”.“SchemaX”.“TableX”"。该表不存在,或者当前用户没有访问该表的权限。
我对完全限定的表名称包括[DataCenterCityName2_DB2OurDatabase]感到有点惊讶,因为我在设置链接服务器连接时没有指定此名称,但数据中心城市的名称是正确的,因此我将此视为链接服务器连接成功的进一步标志。
尽管如此,我也试图执行删除这个级别的完全限定表名:

SELECT * 
FROM [DB2OurDatabase].[SchemaX].[TableX]

这导致了此错误。
消息208,级别16,状态1,行1
无效的对象名称'DB2OurDatabase.[SchemaX].[TableX ]'。
要创建一个允许查询DB2数据库中的表的DB2链接服务器,我需要做些什么?下面是我的链接服务器属性:

uxh89sit

uxh89sit1#

我还没有研究从Sql Server连接和查询DB2可能有哪些方法,但以下方法是有效:
在DB2Our数据库中,“从模式X.表X中选择 *”

j8yoct9x

j8yoct9x2#

显然,您通过替换对象名修改了实际命令,因此无法确定,但问题可能是由于使用了带引号的标识符引起的(那些方括号),这实际上使对象名区分大小写。(表、架构)名称,除非用引号括起来。create table MySchema.MyTable...(不带引号)将创建表MYSCHEMA.MYTABLE,稍后从SSMS中将其引用为[MySchema].[MyTable](使用带引号的标识符)显然会失败。

pvabu6sv

pvabu6sv3#

这是3个steps,它们将我带到了解决方案:
1.下载并安装Microsoft OLE DB Provider for DB2 Version 6.0(这是最新版本,但当你读到这篇文章时,可能已经有了新版本)
1.从开始菜单打开数据访问工具〉文件〉新建数据源并完成所有步骤:提供众所周知的凭据,如服务器、端口、数据库、用户、密码。如果不确定,请联系您的DBA。完成后,测试连接并复制连接字符串

1.现在,在SSMS上,转到“服务器对象”〉“链接服务器”〉“新建链接服务器”,并像图片中那样在Provider string中设置之前从数据访问工具复制的字符串:

好了,你可以走了,

相关问题