为多行选择序列 NEXTVAL

问题描述 投票:0回答:4

我正在构建一个 SQL Server 作业,通过链接服务器将数据从 SQL 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.Country

MYSERVER 是链接的 Oracle 服务器,ORCL 显然是架构。 Person 是执行查询的 SQL Server 数据库上的本地表。

当我运行此查询时,我为 NEXTVAL 的所有记录获得相同的精确值。我需要的是它为每个返回的记录生成一个新值。

我发现了这个类似的问题及其答案,但不确定如何将其应用于我的案例(如果可能的话):在一个语句中从序列中查询多个 NEXTVAL

sql sql-server oracle-database oracle10g linked-server
4个回答
3
投票

将其放入 SQL 标量函数中。示例:

CREATE function [dbo].SEQ_PERSON() 
returns bigint as
begin
    return
    (   select NEXTVAL 
        from openquery(oraLinkedServer, 'select SEQ_PERSON.NEXTVAL FROM DUAL')
    )
end

0
投票

我最终不得不遍历所有记录并单独设置 ID 值。又乱又慢,但这似乎是这种情况下唯一的选择。


0
投票

非常简单,只需使用光标即可迭代代码:

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

来自人 psn 左加入 MYSERVER..ORCL.COUNTRY c ON c.COUNTRY_CODE = psn.Country

打开方格 从 SQCURS 获取下一个;

希望有帮助


0
投票

有谁知道如何获取从 SQL 存储过程创建的序列的下一个值?

上面讲的是oracle sql命令,但我在任何地方都找不到等效的SQL语法。

有人告诉我这可以在 SQL 上运行,但我相信它是基于 Oracle 的。

从 DUAL 中选择 Seq_name.nextval;

© www.soinside.com 2019 - 2024. All rights reserved.