如何使用 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中使用参数,并作为表查询对象/不允许使用远程表值函数调用。
sqlserver2008 openquery执行服务就退出