Pregunta

Estoy tratando de simplificar un proceso complejo de almacenar información en varias tablas y vincularlas a una tabla central. El enlace se produce utilizando los valores de IDENTIDAD generados en cada tabla para proporcionar el enlace único. Sé que puedo usar una combinación de SET NOCOUNT ON y SELECT @@ identity para obtener cada identidad, pero eso requiere que llame a un SQLExecute () separado para cada tabla. He leído docenas de artículos que dicen que ADO puede manejar múltiples conjuntos de registros usando un controlador ODBC, entonces la pregunta es ¿cómo lo hago sin ADO?

Ya he encapsulado todas las cosas estándar de ODBC para un comportamiento similar a ADO. Básicamente, solo necesito saber qué llamadas a la API de ODBC me permitirán recrear el NextRecorset () de ADO.

Estoy trabajando en una combinación de MS SQL 7 y MS SQL 2005, usando el ODBC de SQL Server o los controladores de cliente nativo de SQL, según corresponda.

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")
¿Fue útil?

Solución

Utilice la llamada SQLMoreResults () como el análogo a la función NextRecordSet () .

Sin embargo, probablemente no necesite eso si está dispuesto a hacer que sus ejecuciones consistan en INSERT ...; SELECCIONE @@ IDENTIDAD Como el único resultado que se obtiene de esta declaración es la identidad, no necesita molestarse con el SQLMoreResults () .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top