我正在构建一个server作业,以便通过链接服务器将数据从Server中提取到Oracle数据库中。我需要填充的表有一个名称ID的序列,这是我的主键。我很难想出一种简单的方法,不需要一些冗长的代码。以下是我到目前为止对SELECT部分的了解(一些实际名称被混淆):
SELECT (SELECT NEXTVAL FROM OPENQUERY(MYSERVER,
'SELECT ORCL.NAME_SEQNO.NEXTVAL FROM DUAL')),
psn.BirthDate, psn.FirstName,
psn.MiddleName, psn.LastName, c.REGION_CODE
FROM Person psn
LEFT JOIN MYSERVER..ORCL.COUNTRY c ON c.COUNTRY_CODE = psn.CountryMYSERVER是链接的Oracle服务器,ORCL显然是模式。Person是正在执行查询的Server数据库中的本地表。
在运行此查询时,为NEXTVAL的所有记录获得相同的确切值。我需要的是为每个返回的记录生成一个新的值。
我发现了这个类似的问题,并给出了答案,但我不知道如何将它应用到我的案例中(如果可能的话):Query several NEXTVAL from sequence in one statement
发布于 2012-11-21 15:42:14
最后,我不得不遍历所有记录并分别设置ID值。混乱和缓慢,但这似乎是唯一的选择在这种情况下。
发布于 2013-05-15 18:54:39
将其放入SQL标量函数中。示例:
CREATE function [dbo].SEQ_PERSON()
returns bigint as
begin
return
( select NEXTVAL
from openquery(oraLinkedServer, 'select SEQ_PERSON.NEXTVAL FROM DUAL')
)
end发布于 2018-01-14 15:56:09
非常简单,只需使用游标来迭代代码:
SELECT NEXTVAL AS SQ from OPENQUERY(MYSERVER, 'SELECT AC2012.NAME_SEQNO.NEXTVAL FROM DUAL'),因此您可以将此select语句嵌入到任何Sql语句中,并通过游标.进行迭代。
PS:
DECLARE SQCURS CURSOR
FOR SELECT (SELECT NEXTVAL AS SQ FROM OPENQUERY(MYSERVER,
'SELECT ORCL.NAME_SEQNO.NEXTVAL FROM DUAL')),
psn.BirthDate, psn.FirstName, psn.MiddleName, psn.LastName, c.REGION_CODE从Person psn左转加入MYSERVER..ORCL.COUNTRY c ON c.COUNTRY_CODE = psn.Country
打开SQCURS,然后从SQCURS获取;
我希望你能帮上忙
https://stackoverflow.com/questions/13459331
复制相似问题