Crear tabla desde una consulta asignando campos clave

Partiendo de un fichero necesito crear una tabla con solo dos campos y que estos a su vez sean campos clave. (año y mes)

Si utilizo el asitente para crear la tabla, os copia el sql que genera, los campos no son claves. Intuyo que podría modificar estos comando introduciendo en algún lugar que me los cree como claves, pero no se como hacerlo.

SELECT CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes INTO 1010_MES_CARGA
FROM CdM_Productos_Comisionables
GROUP BY CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes;

Buscando por el foro he encontrado esto, pero no consigo adaptarlo

... Pega esto (claro que modifícalo a lo que necesitas..)
CREATE TABLE CLIENTES (IdCliente INTEGER CONSTRAINT CIavePrincipal PRIMARY KEY, Nombre TEXT (50))
Aqui crea una tabla CLEINTES con dos campos IdCleinte (Principal) y Nombre..

1 respuesta

Respuesta
1

Para crear una tabla con dos claves, usa:

CurrentDb.Execute "CREATE TABLE  1010_MES_CARGA (anio int NOT NULL,mes int NOT NULL,CONSTRAINT PK_clave PRIMARY KEY (anio,mes));"

y luego haz el traspaso de registros:

CurrentDb.Execute "INSERT INTO 1010_MES_CARGA SELECT CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes FROM CdM_Productos_Comisionables
GROUP BY CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes"

Un saludo.


     bit.ly/ForoNkSv 

Gracias por tu pronta  respuesta sveibjorn, pero seguro que lo estoy haciendo mal.

He creado una consulta de selección sin incluir ninguna tabla ni nada, luego he ido a vista sql y he pegado lo que me has indicado :

CurrentDb.Execute "CREATE TABLE 1010_MES_CARGA (anio int NOT NULL,mes int NOT NULL,CONSTRAINT PK_clave PRIMARY KEY (anio,mes));"
CurrentDb.Execute "INSERT INTO 1010_MES_CARGA SELECT CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes FROM CdM_Productos_Comisionables
GROUP BY CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes"

pero a la hora de ejecutarlo, me indica "Instrucción sql no valida: se esperaba "DELETE; INSERT; SELECT....."

Si me puedes ayudar algo más te lo agradeceria. Como puedes comprobar mis conocimientos son de principiante.

Gracias nuevamente.

Mi respuesta era para hacerlo desde código VBA. Si lo quieres hacer desde consultas, pega solo lo que va entre las comillas de cada una.

Hola sveibjorn, si no lo interpreto mal, tendría que hacer dos consultas, una para crear la tabla

CREATE TABLE  1010_MES_CARGA (anio int NOT NULL,mes int NOT NULL,CONSTRAINT PK_clave PRIMARY KEY (anio,mes));

y la otra que me anexa los datos

INSERT INTO 1010_MES_CARGA SELECT CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes FROM CdM_Productos_Comisionables
GROUP BY CdM_Productos_Comisionables.anio, CdM_Productos_Comisionables.mes

Mi intención es hacerlo en una unica consulta, que de hecho no se si será posible.

Gracias.

Si quieres que los dos campos de la consulta resultante sean claves, no, no puedes ha erlo en una consulta (te pasará como con la que ya tenías, te crea la tabla con los datos, pero sin claves).

De todas formas, la consulta de creación de tabla solo la necesitarás ejecutar una vez, pues cuando la tengas creada, solo es ir anexando registros ejecutando la segunda consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas