我有一个本地SQL Server实例,我在其上创建了一个与名为“DB2OurDatabase”的DB2数据库的链接服务器连接。在创建链接服务器连接时,我指定了一个UID和PWD,我在各种查询工具或应用程序中使用它来查询“[SchemaX]。[TableX]。”
我似乎在创建链接服务器方面取得了成功:链接服务器节点在SSMS中的链接服务器节点下创建了名为“DB2OurDatabase”的对象,当我展开它时,我能够看到表中的数据库。
当我右键单击[SchemaX]。[TableX]表并选择
时“脚本表为=>选择To ==>新窗口”,用文本打开了一个新的查询窗口
--[DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX]
contains no columns that can be selected or the current user does not have permissions on that object.
GO
我不明白我是如何创建一个能够在数据库中看到表名的链接服务器,但显然似乎遇到了一个看起来缺乏查询表的权限,即使我使用它也是如此我在Squirell SQL查询工具中使用的凭据,例如,查询表。
在SSMS中,我试图执行此
SELECT *
FROM [DB2OurDatabase].[DataCenterCityName2_DB2OurDatabase].[SchemaX].[TableX]
错误:
Msg 7314,Level 16,State 1,Line 1
链接服务器“DB2OurDatabase”的OLE DB提供程序“IBMDADB2”不包含表“”DataCenterCityName2_DB2OurDatabase“。”SchemaX“。”TableX“”。该表不存在或当前用户没有该表的权限。
我有点惊讶的是,完全限定的表名包括[DataCenterCityName2_DB2OurDatabase],因为我在设置链接服务器连接时没有指定这个,但DataCenter城市的名称是正确的所以我把它作为进一步的标志Linked Server连接成功。
尽管如此,我还尝试执行删除此级别的完全限定表名:
SELECT *
FROM [DB2OurDatabase].[SchemaX].[TableX]
导致此错误。
Msg 208,Level 16,State 1,Line 1
无效的对象名称'DB2OurDatabase。[SchemaX]。[TableX]'。
创建允许查询DB2数据库中的表的DB2链接服务器需要做什么?这是我的链接服务器属性:
答案 0 :(得分:0)
我没有研究从Sql Server连接和查询DB2的可能的多种方法,但这有效:
SELECT * FROM OPENQUERY(DB2数据库,'SELECT * FROM SchemaX.TableX')
答案 1 :(得分:0)
显然,您通过替换对象名称来修改实际命令,因此无法确定,但问题可能是由于您使用带引号的标识符(那些方括号)引起的,这实际上使对象名称区分大小写。默认情况下,DB2将以大写形式创建对象(表,模式)名称,除非它们被引用。 DB2端的create table MySchema.MyTable...
(未引用)将创建表MYSCHEMA.MYTABLE
,稍后从SSMS引用它[MySchema].[MyTable]
(使用带引号的标识符)显然会失败。