O OpenEdge, assim como vários outros bancos de dados, dispõe de um objeto nativo no banco de dados chamado seqüencia (SEQUENCE). A função deste objeto é gerar números incrementais (em incrementos positivos ou negativos) e garantir que os número gerados não sejam repetidos, mesmo que a seqüência seja utilizada concorrentemente por vários processos.
No SQL Server, não existe um objeto do tipo seqüência. Os números sequenciais são gerados automaticamente pelo servidor quando define-se a propriedade IDENTITY em uma coluna numérica.
A ausência de seqüências no SQL Server é um fator que gera muita confusão quando se utiliza o DataServer, pois os programas 4GL / ABL que usam seqüências funcionam normalmente. Para manter esta compatibilidade o DataServer cria uma tabela e uma Stored Procedure (SP) no SQL Server para cada seqüência existente no banco OpenEdge. Para o programador esta emulação é transparente, não há necessidade de alterar o programa.
Os objetos gerados pelo DataServer têm o nome _SEQT_<nome seqüência> e _SEQP_<nome seqüência>. Por exemplo, a seqüência Next-Cust-Num do banco sports, ao ser convertida pelo DataServer vai gerar uma tabela de nome _SEQT_next_cust_num e uma SP de nome _SEQP_next_cust_num. Em um banco de dados com 50 seqüências, serão geradas 50 tabelas e 50 SPs.
Na tabela são armazenados as propriedades (valor inicial, valor máximo, incremento) e o valor atual da seqüência. Esta tabela sempre tem 5 colunas e sempre deverá ter 1 registro. Se a tabela não tiver registros ou tiver mais do que 1 registro, ocorrerão erros quando o programa pedir um valor de seqüência.
A função da SP é gerar o novo valor incremental e retorná-lo para a aplicação. A mesma SP também suporta as operações de leitura do valor atual da seqüência (CURRENT-VALUE) e alteração do valor atual (ASSIGN CURRENT-VALUE).
Sempre que um programa 4GL / ABL utiliza uma seqüência, com as funções NEXT-VALUE, DYNAMIC-NEXT-VALUE, CURRENT-VALUE ou DYNAMIC-CURRENT-VALUE, o DataServer gera, internamente, uma chamada à Stored Procedure para realizar a operação correspondente.
O manual do Dataserver SQL possui mais detalhes sobre o funcionamento das seqüências quando utilizadas com bancos SQL Server.