varios registros insertar hacer ejemplos ejecutar consultas consulta como ms-access

ms access - registros - ¿Cómo ejecuto múltiples sentencias SQL en Access ''Query Editor?



insertar varios registros en sql access (4)

Tengo un archivo de texto con algunas declaraciones SQL que quiero ejecutar en una base de datos de Access. Pensé que debería ser posible con Access ''Query Editor. Entonces, voy a este editor y pego las declaraciones:

insert into aFewYears (yr) values (''2000'') insert into aFewYears (yr) values (''2001'') insert into aFewYears (yr) values (''2002'') insert into aFewYears (yr) values (''2003'')

Intentando ejecutarlos (al presionar el signo de exclamación rojo) recibo un
Missing semicolon (;) at end of SQL statement.

Esto podría tomarse como una indicación de que el editor permitiría ejecutar múltiples declaraciones. Por lo tanto, cambio las instrucciones y agrego un punto y coma al final:

insert into aFewYears (yr) values (''2000''); insert into aFewYears (yr) values (''2001''); insert into aFewYears (yr) values (''2002''); insert into aFewYears (yr) values (''2003'');

Entonces obtengo un
Characters found after end of SQL statement.
lo que probablemente podría tomarse como una indicación de que no es posible ejecutar múltiples declaraciones.

Ok, entonces la pregunta: ¿es posible ejecutar múltiples declaraciones en el editor de consultas, o es posible de alguna manera ejecutar por lotes sentencias SQL en un archivo en / on / contra Access.

Gracias / René

editar Las instrucciones de inserción se usaron como ejemplo y me doy cuenta de que no son perfectas, porque todas van a la misma mesa y, obviamente, de alguna manera se puede resolver con una declaración que tenga una unión o algo así. En mi caso real que trato de resolver, el archivo no solo contiene instrucciones de inserción, sino también crea declaraciones de tabla e inserta instrucciones con diferentes tablas subyacentes. Así que esperaba (y todavía espero) que haya algo así como mi amado SQL * Plus para Oracle que pueda ejecutar un archivo con todo tipo de declaraciones SQL.


Desafortunadamente, AFAIK no puede ejecutar múltiples sentencias de SQL bajo una consulta con nombre en Access en el sentido tradicional.

Puede realizar varias consultas y luego unirlas con VBA ( DoCmd.OpenQuery si la memoria se sirve).

También puede enhebrar un montón de cosas con UNION si lo desea.


Es posible que sea mejor utilizar un programa de terceros para ingresar las consultas en Access, como WinSQL , creo que desde la memoria WinSQL admite múltiples consultas a través de su función por lotes.

Finalmente me pareció más fácil escribir un programa en perl para hacer inserciones masivas en un acceso a través de ODBC. Sin embargo, podría usar vbscript o cualquier lenguaje que admita ODBC.

A continuación, puede hacer lo que quiera y tener su propia lógica complicada para manejar la importación.


Mejor solo crea un archivo XLSX con nombres de campo en la fila superior. Créelo manualmente o usando Mockaroo. Exportarlo a Excel (o CSV) y luego importarlo a Access usando New Data Source -> From File

En mi humilde opinión, es la mejor y más eficiente forma de hacerlo en Access.


Puede escribir fácilmente un código de bit que se leerá en un archivo. Puede asumir un enunciado sql por línea o asumir el;

Entonces, suponiendo que tienes un archivo de texto como:

insert into tblTest (t1) values (''2000''); update tbltest set t1 = ''2222'' where id = 5; insert into tblTest (t1,t2,t3) values (''2001'',''2002'',''2003'');

Tenga en cuenta que en el archivo de texto anterior tenemos libertad para tener sentencias SQL en más de una línea.

el código que puede usar para leer + ejecutar el script anterior es:

Sub SqlScripts() Dim vSql As Variant Dim vSqls As Variant Dim strSql As String Dim intF As Integer intF = FreeFile() Open "c:/sql.txt" For Input As #intF strSql = input(LOF(intF), #intF) Close intF vSql = Split(strSql, ";") On Error Resume Next For Each vSqls In vSql CurrentDb.Execute vSqls Next End Sub

Puede expandir al colocar algunos mensajes de error si la única instrucción no funciona, como

if err.number <> 0 then debug.print "sql err" & err.Descripiton & "-->" vSqls end dif

A pesar de todo, la división () y la lectura de cadena anteriores permiten que su sql esté en más de una línea ...