Relaciones, no se como!

17/02/2006 - 15:29 por Victor E. Diaz | Informe spam
Hi List,

Lei un hilo sobre relaciones bastante interesante, siento que las relaciones
para restrinciones de integridad funcionan mejor en VFP que en sql_server,
en fin no es el caso, usaré las cascadas para lo que necesita cascada que
sea importante, y los 'sp' para lo demas, pero no sé como! :-(

Me pueden regalar un ejemplo de 'sp' que impida el borrado de un cliente
dentro de una factura existente, y decirme como lo invoco, o se pone en
CHECKS, que seria mejor, alquien con paciencia me aclara la duda y me ayuda
un poquin.

Gracias mil,

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
17/02/2006 - 16:03 | Informe spam
Victor,

Primero debes usar una restriccion de clave foranea, aunque no actives las
actualizacines y/o borrado en cascada. Si tratas de borrar un cliente que
tiene facturas, sql server chequeara la restriccion de clave foranea y
devolvera error, por lo que tu sp debe acptar como parametro el [id] del
cliente en cuestion, y dentro de una transaccion eliminar sus facturas y
despues eliminar al cliente. Algo asi como:

create procedure p1
customerid nchar(5)
as
set nocount on

begin transaction

if exists(select * from dbo.[orders] where customerid = @customerid)
begin
delete a from dbo.[order details] as a inner join dbo.[orders] as b
on a.orderid = b.orderid and b.orderid = @customerid

delete dbo.[orders] where customerid = @customerid
end

delete dbo.customers where customerid = @customerid

commit transaction
go

No incluyo manejo de errores para hacer el codigo mas sencillo, pero
recomiendo fuertemente que se incluya en codigo en produccion.


AMB

"Victor E. Diaz" wrote:

Hi List,

Lei un hilo sobre relaciones bastante interesante, siento que las relaciones
para restrinciones de integridad funcionan mejor en VFP que en sql_server,
en fin no es el caso, usaré las cascadas para lo que necesita cascada que
sea importante, y los 'sp' para lo demas, pero no sé como! :-(

Me pueden regalar un ejemplo de 'sp' que impida el borrado de un cliente
dentro de una factura existente, y decirme como lo invoco, o se pone en
CHECKS, que seria mejor, alquien con paciencia me aclara la duda y me ayuda
un poquin.

Gracias mil,




Respuesta Responder a este mensaje
#2 Victor E. Diaz
17/02/2006 - 17:13 | Informe spam
Alejandro

Acabo de poner una clave FK con No Action, para otra tabla, trate de borrar
desde la aplicacion y recibo un mensaje de error, esa es la idea me parece
bien, pero:

¿Como capturo ese error?,

Y que puedo entender por:
No Action
Cascade [este si me lo se]
Set Null
Set Default en las acciones de cada restrinccion, refiereme a una buena
fuente, mientras desarrollo lo hago en SQL Express, y no tengo libros en
linea, como he leido recomendaciones!

Un Saludo,


"Alejandro Mesa" escribió en el
mensaje news:
Victor,

Primero debes usar una restriccion de clave foranea, aunque no actives las
actualizacines y/o borrado en cascada. Si tratas de borrar un cliente que
tiene facturas, sql server chequeara la restriccion de clave foranea y
devolvera error, por lo que tu sp debe acptar como parametro el [id] del
cliente en cuestion, y dentro de una transaccion eliminar sus facturas y
despues eliminar al cliente. Algo asi como:

create procedure p1
customerid nchar(5)
as
set nocount on

begin transaction

if exists(select * from dbo.[orders] where customerid = @customerid)
begin
delete a from dbo.[order details] as a inner join dbo.[orders] as b
on a.orderid = b.orderid and b.orderid = @customerid

delete dbo.[orders] where customerid = @customerid
end

delete dbo.customers where customerid = @customerid

commit transaction
go

No incluyo manejo de errores para hacer el codigo mas sencillo, pero
recomiendo fuertemente que se incluya en codigo en produccion.


AMB

"Victor E. Diaz" wrote:

Hi List,

Lei un hilo sobre relaciones bastante interesante, siento que las
relaciones
para restrinciones de integridad funcionan mejor en VFP que en
sql_server,
en fin no es el caso, usaré las cascadas para lo que necesita cascada que
sea importante, y los 'sp' para lo demas, pero no sé como! :-(

Me pueden regalar un ejemplo de 'sp' que impida el borrado de un cliente
dentro de una factura existente, y decirme como lo invoco, o se pone en
CHECKS, que seria mejor, alquien con paciencia me aclara la duda y me
ayuda
un poquin.

Gracias mil,







Respuesta Responder a este mensaje
#3 Alejandro Mesa
17/02/2006 - 21:51 | Informe spam
victor,

¿Como capturo ese error?,



Depende el lenguaje de programacion que uses. En cualquiera de los .net, usa
try ... catch.


SQL Server 2005 Books Online (December 2005)
http://www.microsoft.com/downloads/...layLang=en

SQL Server 2005 Express Edition Documentation and Samples (December 2005)
http://www.microsoft.com/downloads/...x?FamilyID–97aaaa-ad4b-416e-87a4-a8b154f92787&DisplayLang=en


AMB


"Victor E. Diaz" wrote:

Alejandro

Acabo de poner una clave FK con No Action, para otra tabla, trate de borrar
desde la aplicacion y recibo un mensaje de error, esa es la idea me parece
bien, pero:

¿Como capturo ese error?,

Y que puedo entender por:
No Action
Cascade [este si me lo se]
Set Null
Set Default en las acciones de cada restrinccion, refiereme a una buena
fuente, mientras desarrollo lo hago en SQL Express, y no tengo libros en
linea, como he leido recomendaciones!

Un Saludo,


"Alejandro Mesa" escribió en el
mensaje news:
> Victor,
>
> Primero debes usar una restriccion de clave foranea, aunque no actives las
> actualizacines y/o borrado en cascada. Si tratas de borrar un cliente que
> tiene facturas, sql server chequeara la restriccion de clave foranea y
> devolvera error, por lo que tu sp debe acptar como parametro el [id] del
> cliente en cuestion, y dentro de una transaccion eliminar sus facturas y
> despues eliminar al cliente. Algo asi como:
>
> create procedure p1
> customerid nchar(5)
> as
> set nocount on
>
> begin transaction
>
> if exists(select * from dbo.[orders] where customerid = @customerid)
> begin
> delete a from dbo.[order details] as a inner join dbo.[orders] as b
> on a.orderid = b.orderid and b.orderid = @customerid
>
> delete dbo.[orders] where customerid = @customerid
> end
>
> delete dbo.customers where customerid = @customerid
>
> commit transaction
> go
>
> No incluyo manejo de errores para hacer el codigo mas sencillo, pero
> recomiendo fuertemente que se incluya en codigo en produccion.
>
>
> AMB
>
> "Victor E. Diaz" wrote:
>
>> Hi List,
>>
>> Lei un hilo sobre relaciones bastante interesante, siento que las
>> relaciones
>> para restrinciones de integridad funcionan mejor en VFP que en
>> sql_server,
>> en fin no es el caso, usaré las cascadas para lo que necesita cascada que
>> sea importante, y los 'sp' para lo demas, pero no sé como! :-(
>>
>> Me pueden regalar un ejemplo de 'sp' que impida el borrado de un cliente
>> dentro de una factura existente, y decirme como lo invoco, o se pone en
>> CHECKS, que seria mejor, alquien con paciencia me aclara la duda y me
>> ayuda
>> un poquin.
>>
>> Gracias mil,
>>
>>
>>
>>
>




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida