Domanda

Sto cercando di semplificare un complesso processo di archiviazione delle informazioni in più tabelle e il loro collegamento a una tabella centrale. Il collegamento si verifica utilizzando i valori IDENTITÀ generati in ciascuna tabella per fornire il collegamento univoco. So di poter usare una combinazione di SET NOCOUNT ON e SELECT @@ identità per ottenere ciascuna identità, ma ciò mi richiede comunque di chiamare un SQLExecute () separato per ogni tabella. Ho letto dozzine di articoli in cui si dice che ADO può gestire più recordset usando un driver ODBC, quindi la domanda è come posso farlo senza ADO?

Ho già incapsulato tutte le cose ODBC standard per un comportamento simile a ADO. Fondamentalmente ho solo bisogno di sapere quali chiamate API ODBC mi permetteranno di ricreare NextRecorset () di ADO.

Sto lavorando su una combinazione di MS SQL 7 e MS SQL 2005, utilizzando i driver ODBC di SQL Server o SQL Native Client, a seconda dei casi.

Fine obiettivo:

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")
È stato utile?

Soluzione

Utilizza la chiamata SQLMoreResults () come analogo alla funzione NextRecordSet () .

Tuttavia, probabilmente non è necessario che, se si desidera che le esecuzioni siano costituite da INSERT ...; SELECT @@ IDENTITY Poiché l'unico risultato restituito da questa istruzione è l'identità, non è necessario preoccuparsi di SQLMoreResults () .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top