Tablas relacionadas en sql , duda

Iniciado por nico56, 24 Diciembre 2009, 18:46 PM

0 Miembros y 1 Visitante están viendo este tema.

nico56

Hola, estoy practicando con este lenguaje pero no me anda el "AUTO_INCREMENT", me da error en la linea marcada.


CREATE TABLE clientes
(
     id_cliente int NOT NULL AUTO_INCREMENT PRIMARY KEY, /*Aqui me da error*/
     nombre text NOT NULL
     
     
)

CREATE TABLE articulos
(
    id_articulo int NOT NULL PRIMARY KEY,
    nombre text NOT NULL
   
)

CREATE TABLE ventas
(
    id_venta int NOT NULL PRIMARY KEY,
    id_cliente int NOT NULL FOREIGN KEY(id_cliente)  REFERENCES clientes(id_cliente),
    cantidad int NOT NULL, /*La cantidad de unidades de ese articulo*/
    id_articulo int NOT NULL FOREIGN KEY (id_articulo) REFERENCES articulos(id_articulo),
    precio_unitario real NOT NULL,
    precio_total real NOT NULL

)


Otra duda, en caso de que anduviera en auto increment, al realizar el inserte solo se le pasa un parametro a la parte de values ?

Shell Root

#1
Intentá Así:
SQL Server 2008
CREATE TABLE dbo.Clientes (
[Id_Cliente] [Int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Nombre] [Text] NOT NULL
)
GO


Cita de: nico56 en 24 Diciembre 2009, 18:46 PMOtra duda, en caso de que anduviera en auto increment, al realizar el inserte solo se le pasa un parametro a la parte de values ?
Simon! Cuando es un Identity, No es necesario pasarle un valor dentro del INSERT, En esté caso solo le pasas el valor de Nombre... :D

Saludos!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

nico56

Perfecto, muschas gracias pero sabes si se pueden poner expresiones aritmeticas dentro del "INSERT", por ejemplo el campo de la tabla ventas llamado "precio_total", es la multiplicacion del campo "cantidad" y "precio_unitario", eso se especifica en la tabla o en el "INSERT" ?

Shell Root

Para eso Crearemos un Store Procedure, aunque tambien se puede crear dentro de un SELECT o INSERT o lo que sea, solo que me gustan más los Store Procedure. Por Ejemplo:

Tabla: TblProcesos (Tabla donde se almacena los resultados de Suma, Resta, Multiplicación y División)
CREATE TABLE [dbo].[TblProcesos](
[Id] [int] NOT NULL PRIMARY KEY,
[Suma] [varchar](50) NOT NULL,
[Resta] [varchar](50) NOT NULL,
[Multiplicacion] [varchar](50) NOT NULL,
[Division] [varchar](50) NOT NULL
)


Store Procedure: StProcesos (Procedimiento Almacenado para realizar las operacion y la insercion dentro de la tabla de TblProcesos)
-- =============================================
-- Author: < Shell Root >
-- Create date: < 24/12/2009 >
-- Description: < Procesos e Inserción >
-- =============================================
CREATE PROCEDURE StProcesos(
-- Parametros
@Numero1 AS INT,
@Numero2 AS INT
)
AS
BEGIN
SET NOCOUNT ON;

-- Variables
DECLARE @Suma AS INT
DECLARE @Resta AS INT
DECLARE @Multiplicacion AS INT
DECLARE @Division AS INT

-- Procesos
SET @Suma = @Numero1 + @Numero2
SET @Resta = @Numero1 - @Numero2
SET @Multiplicacion = @Numero1 * @Numero2
SET @Division = @Numero1 / @Numero2

-- Inserción
INSERT INTO TblProcesos(Suma, Resta, Multiplicacion, Division)
VALUES (@Suma,@Resta,@Multiplicacion,@Division)
END
GO


Ejecución:
EXEC dbo.StProcesos 3,1

Resultado:
1 4 2 3 3
NULL NULL NULL NULL NULL


Saludos!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

nico56

MMM la verdad que no entendi, podrias ponerlo como se hace en el insert? Yo imaginaba algo mas simple como esto por ejemplo:

insert into ventas values (1,1,5,1,45.90,45.90*5)

Shell Root

Cita de: nico56 en 25 Diciembre 2009, 01:40 AM
MMM la verdad que no entendi, podrias ponerlo como se hace en el insert? Yo imaginaba algo mas simple como esto por ejemplo:

insert into ventas values (1,1,5,1,45.90,45.90*5)

Claro, es simple.
Insert:
INSERT INTO TblProcesos (Suma, Resta, Multiplicacion, Division)
VALUES (10 + 2, 2 - 1, 2 * 2, 6 / 2)


Resultado:
2 12 1 4 3

Saludos!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.