Pergunta

Estou tentando otimizar um processo complexo de armazenar informações em várias tabelas e elas as vinculavam a uma tabela central. A ligação ocorre usando valores de identidade gerados em cada tabela para fornecer a ligação exclusiva. Sei que posso usar uma combinação de conjunto de nocorre e selecionar @@ identidade para obter cada identidade, mas isso ainda exige que eu chame um sqlexECUte () separado para cada tabela. Eu li dezenas de artigos dizendo que a ADO pode lidar com vários registros usando um driver ODBC, então a pergunta é como faço isso sem ADO?

Eu já encapsulei todo o material padrão do ODBC para comportamento semelhante ao ADO. Basicamente, só preciso saber quais chamadas da API da ODBC me permitirá recriar o nextrecorset () da ADO.

Estou trabalhando em uma combinação de MS SQL 7 e MS SQL 2005, usando os drivers de clientes nativos do SQL Server ODBC ou SQL, conforme apropriado.

Objetivo final:

SET NOCOUNT ON;
INSERT INTO TableA (data) VALUES ('a');
SELECT @@identity AS  NewID;
INSERT INTO TableB (data) VALUES ('b');
SELECT @@identity AS  NewID;
INSERT INTO TableC (data) VALUES ('c');
SELECT @@identity AS  NewID;
...
RS = DB.OpenRecordset()
RS.MoveFirst()
A_ID = RS.GetValue("id")
RS.NextRecordset()
RS.MoveFirst()
B_ID = RS.GetValue("id")
RS.NextRecordset()
RS.MoveFirst()
C_ID = RS.GetValue("id")
Foi útil?

Solução

Use o SQLMoreResults() ligue como análogo ao NextRecordSet() função.

No entanto, você provavelmente não precisa disso se estiver disposto a fazer seus executivos consistirem em INSERT ...; SELECT @@IDENTITY Como o único resultado retornado desta declaração é a identidade, você não precisa se preocupar com o SQLMoreResults().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top