none
Crear una restricción CHECK en un campo con columnas diferetes

    Pregunta

  • Hola gente,

    tengo una duda y es la siguiente temgo dos tablas creadas (carteras y precios) en la cual carteras tiene un campo montototal y cantidad y en la tabla precios tengo el campo.

    lo que quiero hacer es colocar una restricción que la columna MontoTotal = Precio * cantidad

    --- creacion de tabla carteras
    create table Carteras
    (
    CarteraID int identity(1,1) primary key not null,
    ProductoID int not null,
    CuentaID int not null,
    MontoTotal money not null,
    Cantidad int not null,
    CONSTRAINT CK_Cantidad_Mayor_Cero CHECK (Cantidad > 0)
    );
    go
    
    -- creacion de tabla precios
    create table Precios
    (
    PrecioID int identity(1,1) primary key not null,
    ProductoID int not null,
    Precio money not null,
    CONSTRAINT CK_Precio_Mayor_Cero CHECK (Precio > 0)
    );
    go
    
    -----tratando de hacer MontoTotal = Precio * Cantidad
    ALTER TABLE Carteras
    ADD CONSTRAINT CK_Monto_Total CHECK (MontoTotal = (dbo.Precios(precio) * Cantidad))
    GO
    
    --- he buscado mucho y no he dado aun con si es posible hacer esta tipo de restriccion

    Gracias a todos.




    • Editado AngelCheck viernes, 14 de septiembre de 2018 21:40 agregando valor al titulo
    viernes, 14 de septiembre de 2018 21:20

Todas las respuestas

  • Hola AngelCheck

    La razon por la que no encuentras documentacion sobre ese tema es porque no puedes implementar esa restriccion, es decir que desde una tabla A no puedes definir un default constraint que use el contenido de otra columna en la tabla B.  Una opcion para ese tipo de requerimiento es el uso de triggers (del cual no soy muy partidario), la otra manera de manejar esa logica es a traves del uso de Procedimientos almacenados.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    sábado, 15 de septiembre de 2018 16:18