Question

J'essaie de rationaliser un processus complexe de stockage d'informations dans plusieurs tables et de les lier à une table centrale. La liaison est effectuée à l'aide des valeurs IDENTITY générées dans chaque table pour fournir la liaison unique. Je sais que je peux utiliser une combinaison de SET NOCOUNT ON et de SELECT @@ identity pour obtenir chaque identité, mais cela nécessite néanmoins que j'appelle un SQLExecute () distinct pour chaque table. J'ai lu des dizaines d'articles affirmant qu'ADO pouvait gérer plusieurs jeux d'enregistrements à l'aide d'un pilote ODBC. La question est donc comment puis-je le faire sans ADO?

J'ai déjà encapsulé tous les éléments ODBC standard pour un comportement similaire à ADO. En gros, il me suffit de savoir quels appels de l'API ODBC me permettront de recréer NextRecorset () d'ADO.

Je travaille sur une combinaison de MS SQL 7 et de MS SQL 2005, en utilisant soit les pilotes ODBC SQL Server, soit les pilotes de client natif SQL, selon le cas.

Objectif 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")
Était-ce utile?

La solution

Utilisez l'appel SQLMoreResults () comme analogue à la fonction NextRecordSet () .

Cependant, vous n'en aurez probablement pas besoin si vous voulez que vos exécutions se composent de INSERT ...; SELECT @@ IDENTITY Le seul résultat renvoyé par cette instruction étant l'identité, vous n'avez pas besoin de vous soucier de SQLMoreResults () <)>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top