diseño de tabla: formula

17/08/2004 - 16:30 por Pedro | Informe spam
hola a todos.
quiero que el campo operador y fecha de una tabla se
actualice automaticamente en insert, update.

probe primero con "valor predeterminado" el problema es
que en update no lo actualiza.

Ahora cree una "funcion definida por el usuario" que la
agrego en "formula" de "diseño de tabla". El problema es
que siempre pone el mismo valor para todos los registros.
Ej: cargue unos registros hace 10 minutos y cuando los
consulto ahora muestra la fecha y hora actual.

Existe alguna forma de que "formula" solo se ejecute en
insert y update?, en definitiva quiero que mantenga la
informacion registrada en insert y no la actualice
constantemente. Se puede?

muchas gracias.

Preguntas similare

Leer las respuestas

#6 Javier Loria
18/08/2004 - 01:14 | Informe spam
Hola Mauricio:
Este es un ejemplo de que NO hacer?
1) Si el Trigger es de INSERT se puede manejar con un DEFAULT como lo
sugirio el mismo Pedro.
2) En el Trigger hiciste SET @Codigo=SELECT I.ID que es una
aberracion que produce el problema de no actualizar todos los datos.
En este caso si de un solo golpe se introducen mas de 2 lineas que ocurre:
==INSERT Demo1(id, nombre, valor1, valor2)
SELECT 'AAA', 'AAAAAA', 1,1
UNION ALL
SELECT 'BBB', 'BBBBBB', 2,2
==> Error 512
En realidad no usaste el @Codigo para nada ya que usaste el UPDATE bien,
de hecho pudo haberse escrito como:
==UPDATE Demo1
SET Operador = user_name()
FROM Inserted I
Inner Join Demo1 D
On I.id = D.id
== Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Mauricio" wrote in message
news:818a01c484ad$518d4d40$
Hola aqui te envio un script, espero te sirva

Create Table Demo1 (id char(3) not null,
nombre varchar(20) not null,
valor1 int not null,
valor2 int not null,
formula as valor1 + valor2,
operador varchar(30)
)
Go
ALTER TABLE Demo1
Add Constraint PK_Clave_Principal
PRIMARY key (id)
Go

CREATE TRIGGER Demo_Ins
ON Demo1
FOR INSERT
As
Declare @Codigo char(3)
Declare @Usuario varchar(30)
Set @Codigo = (Select I.id From Inserted I)
Set @Usuario = user_name()
UPDATE Demo1 SET Operador = @Usuario
From Inserted I Inner Join Demo1 D
On I.id = D.id
Go

/* Prueba agregando registros */

EXITOS

MAURICIO


hola a todos.
quiero que el campo operador y fecha de una tabla se
actualice automaticamente en insert, update.

probe primero con "valor predeterminado" el problema es
que en update no lo actualiza.

Ahora cree una "funcion definida por el usuario" que la
agrego en "formula" de "diseño de tabla". El problema es
que siempre pone el mismo valor para todos los registros.
Ej: cargue unos registros hace 10 minutos y cuando los
consulto ahora muestra la fecha y hora actual.

Existe alguna forma de que "formula" solo se ejecute en
insert y update?, en definitiva quiero que mantenga la
informacion registrada en insert y no la actualice
constantemente. Se puede?

muchas gracias.
.

Respuesta Responder a este mensaje
#7 Pedro
18/08/2004 - 16:29 | Informe spam
gracias por tu respuesta.
te agradeceria si tenes algun ejemplo de como hacerlo.


Hola Pedro:
Si haces procedimientos de modificacion de la tabla


puedes hacerlo en el
momento que se modifica, sin necesidad del trigger.
Muchos programadores (no todos), recomendamos tener


en procedimientos
almacenados para las "funciones" de actualizacion,


insercion y borrado. Ese
seria un excelente lugar para obtener lo que deseas.
No hay una forma "automatica" de lograr esto que


deseas.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Pedro" wrote in


message
news:7ca601c48469$902569a0$
gracias por la respuesta.

El problema del trigger es que tengo que hacer uno por
cada tabla (en todas las tablas me interesa dejar
registrado el operador y la fecha de alta/modificacion)
y son muchas.
No existe otra forma de hacerlo?

gracias nuevamente.

Pedro, podrias implementar un Trigger para ello. Si


quieres te armo luego un
ejemplo de como seria :-)

Pero puedes ir viendo y revisando CREATE TRIGGER en tus


libros on line (BOL)

Suerte


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Pedro" escribió en


el mensaje
news:065801c48466$ce09b5d0$
hola a todos.
quiero que el campo operador y fecha de una tabla se
actualice automaticamente en insert, update.

probe primero con "valor predeterminado" el problema es
que en update no lo actualiza.

Ahora cree una "funcion definida por el usuario" que la
agrego en "formula" de "diseño de tabla". El problema es
que siempre pone el mismo valor para todos los registros.
Ej: cargue unos registros hace 10 minutos y cuando los
consulto ahora muestra la fecha y hora actual.

Existe alguna forma de que "formula" solo se ejecute en
insert y update?, en definitiva quiero que mantenga la
informacion registrada en insert y no la actualice
constantemente. Se puede?

muchas gracias.



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date:


16/08/2004


.





.

Respuesta Responder a este mensaje
#8 Javier Loria
18/08/2004 - 18:11 | Informe spam
Hola Pedro:
La verdad es que ultimamente estoy cada vez mas vagabundo y uso los
wizzards de Visual Studio .NET porque generan muy buen codigo y luego los
ajusto a la medida. Un ejemplo de Update de la Tabla Authors de Pubs:
==ALTER PROCEDURE dbo.AuthorsUpd(
@au_id id,
@au_lname varchar(40),
@au_fname varchar(20),
@phone char(12),
@address varchar(40),
@city varchar(20),
@state char(2),
@zip char(5),
@contract bit,
@Original_au_id id
)
AS
SET NOCOUNT OFF;
UPDATE authors
SET au_id = @au_id, au_lname = @au_lname, au_fname = @au_fname, phone @phone
, address = @address, city = @city, state = @state, zip = @zip,
contract = @contract
, ActualizadoPor = SYSTEM_USER
, ActualizadoEn = CURRENT_TIMESTAMP
WHERE (au_id = @Original_au_id)
== En este caso usan sin bloqueo optimista y sin refrescamiento. Y fue
modificado para incluir dos campos adicionales ActualizadoPor y
ActualizadoEn.
Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda
"Pedro" wrote in message
news:124d01c4852f$b8b986a0$
gracias por tu respuesta.
te agradeceria si tenes algun ejemplo de como hacerlo.


Hola Pedro:
Si haces procedimientos de modificacion de la tabla


puedes hacerlo en el
momento que se modifica, sin necesidad del trigger.
Muchos programadores (no todos), recomendamos tener


en procedimientos
almacenados para las "funciones" de actualizacion,


insercion y borrado. Ese
seria un excelente lugar para obtener lo que deseas.
No hay una forma "automatica" de lograr esto que


deseas.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Pedro" wrote in


message
news:7ca601c48469$902569a0$
gracias por la respuesta.

El problema del trigger es que tengo que hacer uno por
cada tabla (en todas las tablas me interesa dejar
registrado el operador y la fecha de alta/modificacion)
y son muchas.
No existe otra forma de hacerlo?

gracias nuevamente.

Pedro, podrias implementar un Trigger para ello. Si


quieres te armo luego un
ejemplo de como seria :-)

Pero puedes ir viendo y revisando CREATE TRIGGER en tus


libros on line (BOL)

Suerte


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Pedro" escribió en


el mensaje
news:065801c48466$ce09b5d0$
hola a todos.
quiero que el campo operador y fecha de una tabla se
actualice automaticamente en insert, update.

probe primero con "valor predeterminado" el problema es
que en update no lo actualiza.

Ahora cree una "funcion definida por el usuario" que la
agrego en "formula" de "diseño de tabla". El problema es
que siempre pone el mismo valor para todos los registros.
Ej: cargue unos registros hace 10 minutos y cuando los
consulto ahora muestra la fecha y hora actual.

Existe alguna forma de que "formula" solo se ejecute en
insert y update?, en definitiva quiero que mantenga la
informacion registrada en insert y no la actualice
constantemente. Se puede?

muchas gracias.



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.740 / Virus Database: 494 - Release Date:


16/08/2004


.





.

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