如何使用 OpenQuery 在 SQL Server 中创建别名 (IBM DB2)

Posted

技术标签:

【中文标题】如何使用 OpenQuery 在 SQL Server 中创建别名 (IBM DB2)【英文标题】:How to Use OpenQuery to do Create Alias (IBM DB2) in SQL Server 【发布时间】:2020-12-04 05:47:58 【问题描述】:

我使用链接服务器连接AS400 DB2。

例如:选择查询可以工作

select * 
from openquery([DB2], 'select t1.* from  lib.table01 t1
                       fetch first 1 rows only')

但我想使用查询

Create Alias Library.T_temp For Library.T1 (MemberName)

在 SQL Server 中。

它返回了一个错误,因为它没有返回行。

如下(会返回错误):

Select * from OpenQuery([DB2],' Create Alias...')

Update OpenQuery([DB2],' Create Alias...')

有什么方法可以做到吗?

谢谢

【问题讨论】:

exec ('Create Alias .... ' ) at [DB2]; ?? 更好的问题是为什么您认为这是一项适当的任务。别名是一个对象,您(尤其是在不熟悉远程数据库的情况下)不应该在其中创建新对象。这通常需要提升权限。但是一旦创建,它将永远存在(或直到被丢弃)。所以当你第二次走这条路时,会发生什么?发生错误,对吗?建议您退后一步,重新考虑您选择的路径。 @SMor 我知道它会被创建。如果“创建别名..”可以工作,我会考虑删除别名。只想知道该语句是否可以在 MSSQL 中工作。跨度> 我认为创建别名没有任何问题。事实上,如果您想对多成员数据库文件使用 SQL,则它是必要的。我只是不明白您为什么要通过 SQL Server 路由数据库结构更改。最好通过 OLEDB 或直接在绿屏终端上完成。如果您无权访问它,那么它将成为对您的数据库管理员的请求,因为它是访问该成员的永久对象。 【参考方案1】:

不要尝试..

您的openquery() 是首选解决方案。

通过使用openquery(),SQL 语句被传递到 Db2 并在那里运行。由于您已包含 fetch first 1 rows only,因此仅返回 1 行。

查询表格

select TOP 1 t1.* 
from db2.myibmi.lib.table01 t1
offset 0 rows
first first 1 row only

实际上会将所有行拉回 SQL Server,然后在 SQL Server 上过滤它们。 (至少我知道在包含WHERE 子句时是这样使用的。我认为TOP 也好不到哪里去)

【讨论】:

以上是关于如何使用 OpenQuery 在 SQL Server 中创建别名 (IBM DB2)的主要内容,如果未能解决你的问题,请参考以下文章

SQL 使用openquery进行跨库操作

SQL 在OPENQUERY中使用参数,并作为表查询对象/不允许使用远程表值函数调用。

SQL Server 中的 openquery 问题

sqlserver2008 openquery执行服务就退出

MS SQL - MySQL - Openquery 中文字符导入为“?”

SQL链接服务器查询-OPENQUERY的使用