trigger

10/02/2009 - 10:06 por J.L.Pascual | Informe spam
hola:

por mi pregunta vereis que me estoy iniciando. Quiero hacer un trigger
para que en una tabla PEDIDOS me chequee dos campos que tengo llamados fecha
pedido y fecha entrega. Nunca puede ser fecha entrega < fecha pedido y por
eso necesito que cuando la fecha entrega sea mayor que la fecha pedido, la
fecha entrega me tome el valor de la fecha de pedido.

Yo escribo esto pero me da Sintaxis incorrecta cerca de la palabra clave
'then'

if [dbo].[PEDIDO_CABE].[fecha entrega] < [dbo].[PEDIDO_CABE].[fecha pedido]
then

update pedido_cabe set [dbo].[PEDIDO_CABE].[fecha entrega] =
[dbo].[PEDIDO_CABE].[fecha pedido]

end if

¿podéis ayudarme? Gracias anticipadas por vuestro tiempo.

NP

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
10/02/2009 - 10:52 | Informe spam
No puedes consultar los campos directamente, tienes que usar las tablas
virtuales inserted o deleted que existen únicamente dentro de los trigger.

En tu caso, sería algo como

IF EXISTS(SELECT 1 FROM inserted WHERE [fecha entrega] < [fecha pedido])
UPDATE pedido_cabe
SET [fecha entrega] = [fecha pedido]
FROM pedido_cabe p INNER JOIN inserted i
ON p.PK = i.PK
WHERE i.[fecha entrega] < i.[fecha pedido]

Donde "PK" es el campo(s) que conforma(n) la clave primaria de la tabla
pedido_cabe

De todos modos, esa validación la podrías implementar como una restricción
CHECK. Sería más eficiente que hacerlo dentro de un trigger, aunque a cambio
no podrías realizar esa corrección


Un saludo
-
www.navento.com
Servicios de Localización GPS


"J.L.Pascual" wrote:

hola:

por mi pregunta vereis que me estoy iniciando. Quiero hacer un trigger
para que en una tabla PEDIDOS me chequee dos campos que tengo llamados fecha
pedido y fecha entrega. Nunca puede ser fecha entrega < fecha pedido y por
eso necesito que cuando la fecha entrega sea mayor que la fecha pedido, la
fecha entrega me tome el valor de la fecha de pedido.

Yo escribo esto pero me da Sintaxis incorrecta cerca de la palabra clave
'then'

if [dbo].[PEDIDO_CABE].[fecha entrega] < [dbo].[PEDIDO_CABE].[fecha pedido]
then

update pedido_cabe set [dbo].[PEDIDO_CABE].[fecha entrega] =
[dbo].[PEDIDO_CABE].[fecha pedido]

end if

¿podéis ayudarme? Gracias anticipadas por vuestro tiempo.

NP






Respuesta Responder a este mensaje
#2 J.L.Pascual
10/02/2009 - 12:41 | Informe spam
tienes toda la razon, es mejor una restriccion CHEK. Esto es lo que he hecho
y funciona. Pero me surge una duda ¿puedo personalizar el mensaje que envia
SQL al tratar de romper la regla al insertar un registro?
Gracias por tu ayuda. Un cordial saludo

ALTER TABLE [dbo].[PEDIDO] WITH NOCHECK ADD CONSTRAINT [FECHA ENTREGA DEBE
SER > FECHA PEDIDO] CHECK (([fecha entrega]>[Fecha pedido]))
GO

ALTER TABLE [dbo].[PEDIDO] CHECK CONSTRAINT [FECHA ENTREGA DEBE SER > FECHA
PEDIDO]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'FECHA
ENTREGA DEBE SER > FECHA PEDIDO' , @level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'PEDIDO',
@level2type=N'CONSTRAINT',@level2name=N'FECHA ENTREGA DEBE SER > FECHA
PEDIDO'

"Carlos Sacristan" escribió en
el mensaje news:

No puedes consultar los campos directamente, tienes que usar las tablas
virtuales inserted o deleted que existen únicamente dentro de los trigger.

En tu caso, sería algo como

IF EXISTS(SELECT 1 FROM inserted WHERE [fecha entrega] < [fecha pedido])
UPDATE pedido_cabe
SET [fecha entrega] = [fecha pedido]
FROM pedido_cabe p INNER JOIN inserted i
ON p.PK = i.PK
WHERE i.[fecha entrega] < i.[fecha pedido]

Donde "PK" es el campo(s) que conforma(n) la clave primaria de la tabla
pedido_cabe

De todos modos, esa validación la podrías implementar como una restricción
CHECK. Sería más eficiente que hacerlo dentro de un trigger, aunque a
cambio
no podrías realizar esa corrección


Un saludo
-
www.navento.com
Servicios de Localización GPS


"J.L.Pascual" wrote:

hola:

por mi pregunta vereis que me estoy iniciando. Quiero hacer un
trigger
para que en una tabla PEDIDOS me chequee dos campos que tengo llamados
fecha
pedido y fecha entrega. Nunca puede ser fecha entrega < fecha pedido y
por
eso necesito que cuando la fecha entrega sea mayor que la fecha pedido,
la
fecha entrega me tome el valor de la fecha de pedido.

Yo escribo esto pero me da Sintaxis incorrecta cerca de la palabra clave
'then'

if [dbo].[PEDIDO_CABE].[fecha entrega] < [dbo].[PEDIDO_CABE].[fecha
pedido]
then

update pedido_cabe set [dbo].[PEDIDO_CABE].[fecha entrega] >> [dbo].[PEDIDO_CABE].[fecha pedido]

end if

¿podéis ayudarme? Gracias anticipadas por vuestro tiempo.

NP






Respuesta Responder a este mensaje
#3 Carlos Sacristan
10/02/2009 - 13:47 | Informe spam
No, eso lo tienes que hacer en la aplicación cliente, capturando la
excepción que te lanza SQL Server y mostrando al usuario el mensaje que
consideres


Un saludo
-
www.navento.com
Servicios de Localización GPS


"J.L.Pascual" wrote:

tienes toda la razon, es mejor una restriccion CHEK. Esto es lo que he hecho
y funciona. Pero me surge una duda ¿puedo personalizar el mensaje que envia
SQL al tratar de romper la regla al insertar un registro?
Gracias por tu ayuda. Un cordial saludo

ALTER TABLE [dbo].[PEDIDO] WITH NOCHECK ADD CONSTRAINT [FECHA ENTREGA DEBE
SER > FECHA PEDIDO] CHECK (([fecha entrega]>[Fecha pedido]))
GO

ALTER TABLE [dbo].[PEDIDO] CHECK CONSTRAINT [FECHA ENTREGA DEBE SER > FECHA
PEDIDO]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'FECHA
ENTREGA DEBE SER > FECHA PEDIDO' , @level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'PEDIDO',
@level2type=N'CONSTRAINT',@level2name=N'FECHA ENTREGA DEBE SER > FECHA
PEDIDO'

"Carlos Sacristan" escribió en
el mensaje news:
>
> No puedes consultar los campos directamente, tienes que usar las tablas
> virtuales inserted o deleted que existen únicamente dentro de los trigger.
>
> En tu caso, sería algo como
>
> IF EXISTS(SELECT 1 FROM inserted WHERE [fecha entrega] < [fecha pedido])
> UPDATE pedido_cabe
> SET [fecha entrega] = [fecha pedido]
> FROM pedido_cabe p INNER JOIN inserted i
> ON p.PK = i.PK
> WHERE i.[fecha entrega] < i.[fecha pedido]
>
> Donde "PK" es el campo(s) que conforma(n) la clave primaria de la tabla
> pedido_cabe
>
> De todos modos, esa validación la podrías implementar como una restricción
> CHECK. Sería más eficiente que hacerlo dentro de un trigger, aunque a
> cambio
> no podrías realizar esa corrección
>
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
>
> "J.L.Pascual" wrote:
>
>> hola:
>>
>> por mi pregunta vereis que me estoy iniciando. Quiero hacer un
>> trigger
>> para que en una tabla PEDIDOS me chequee dos campos que tengo llamados
>> fecha
>> pedido y fecha entrega. Nunca puede ser fecha entrega < fecha pedido y
>> por
>> eso necesito que cuando la fecha entrega sea mayor que la fecha pedido,
>> la
>> fecha entrega me tome el valor de la fecha de pedido.
>>
>> Yo escribo esto pero me da Sintaxis incorrecta cerca de la palabra clave
>> 'then'
>>
>> if [dbo].[PEDIDO_CABE].[fecha entrega] < [dbo].[PEDIDO_CABE].[fecha
>> pedido]
>> then
>>
>> update pedido_cabe set [dbo].[PEDIDO_CABE].[fecha entrega] > >> [dbo].[PEDIDO_CABE].[fecha pedido]
>>
>> end if
>>
>> ¿podéis ayudarme? Gracias anticipadas por vuestro tiempo.
>>
>> NP
>>
>>
>>
>>
>>
>>



Respuesta Responder a este mensaje
#4 J.L.Pascual
10/02/2009 - 16:38 | Informe spam
Gracias de nuevo por tu ayuda

NP


"Carlos Sacristan" escribió en
el mensaje news:

No, eso lo tienes que hacer en la aplicación cliente, capturando la
excepción que te lanza SQL Server y mostrando al usuario el mensaje que
consideres


Un saludo
-
www.navento.com
Servicios de Localización GPS


"J.L.Pascual" wrote:

tienes toda la razon, es mejor una restriccion CHEK. Esto es lo que he
hecho
y funciona. Pero me surge una duda ¿puedo personalizar el mensaje que
envia
SQL al tratar de romper la regla al insertar un registro?
Gracias por tu ayuda. Un cordial saludo

ALTER TABLE [dbo].[PEDIDO] WITH NOCHECK ADD CONSTRAINT [FECHA ENTREGA
DEBE
SER > FECHA PEDIDO] CHECK (([fecha entrega]>[Fecha pedido]))
GO

ALTER TABLE [dbo].[PEDIDO] CHECK CONSTRAINT [FECHA ENTREGA DEBE SER >
FECHA
PEDIDO]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'FECHA
ENTREGA DEBE SER > FECHA PEDIDO' ,
@level0type=N'SCHEMA',@level0name=N'dbo',
@level1type=N'TABLE',@level1name=N'PEDIDO',
@level2type=N'CONSTRAINT',@level2name=N'FECHA ENTREGA DEBE SER > FECHA
PEDIDO'

"Carlos Sacristan" escribió
en
el mensaje news:
>
> No puedes consultar los campos directamente, tienes que usar las tablas
> virtuales inserted o deleted que existen únicamente dentro de los
> trigger.
>
> En tu caso, sería algo como
>
> IF EXISTS(SELECT 1 FROM inserted WHERE [fecha entrega] < [fecha
> pedido])
> UPDATE pedido_cabe
> SET [fecha entrega] = [fecha pedido]
> FROM pedido_cabe p INNER JOIN inserted i
> ON p.PK = i.PK
> WHERE i.[fecha entrega] < i.[fecha pedido]
>
> Donde "PK" es el campo(s) que conforma(n) la clave primaria de la tabla
> pedido_cabe
>
> De todos modos, esa validación la podrías implementar como una
> restricción
> CHECK. Sería más eficiente que hacerlo dentro de un trigger, aunque a
> cambio
> no podrías realizar esa corrección
>
>
> Un saludo
> -
> www.navento.com
> Servicios de Localización GPS
>
>
> "J.L.Pascual" wrote:
>
>> hola:
>>
>> por mi pregunta vereis que me estoy iniciando. Quiero hacer un
>> trigger
>> para que en una tabla PEDIDOS me chequee dos campos que tengo llamados
>> fecha
>> pedido y fecha entrega. Nunca puede ser fecha entrega < fecha pedido y
>> por
>> eso necesito que cuando la fecha entrega sea mayor que la fecha
>> pedido,
>> la
>> fecha entrega me tome el valor de la fecha de pedido.
>>
>> Yo escribo esto pero me da Sintaxis incorrecta cerca de la palabra
>> clave
>> 'then'
>>
>> if [dbo].[PEDIDO_CABE].[fecha entrega] < [dbo].[PEDIDO_CABE].[fecha
>> pedido]
>> then
>>
>> update pedido_cabe set [dbo].[PEDIDO_CABE].[fecha entrega] >> >> [dbo].[PEDIDO_CABE].[fecha pedido]
>>
>> end if
>>
>> ¿podéis ayudarme? Gracias anticipadas por vuestro tiempo.
>>
>> NP
>>
>>
>>
>>
>>
>>



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