Updatear otra tabla en triger insert

26/11/2006 - 03:30 por Norberto Kelijman | Informe spam
Estimados:

Uso SQL Server 2005.
Esquemáticamente,

La tabla PuntosDeVenta tiene los campos idPuntoDeVenta y
UltimoNumeroAsignado.

La tabla Comprobantes tiene los campos idComprobante, idPuntoDeVenta,
NumeroDeComprobante.

La tarea, puesta en español, es que cada vez que se inserta un Comprobante,
voy a la tabla PuntosDeVenta, le agrego 1 a UltimoNumeroAsignado (según el
punto de venta) y el nuevo valor lo pongo en NumeroDeComprobante de la tabla
Comprobantes.

Estoy tratando de hacer un trigger Insert. Ya sé que el trigger se ejecuta
una vez por sentencia, y efectivamente a veces hago INSERT SELECT. También
sé de la existencia de la tabla Inserted.

Mi problema es cómo hacer para updatear la tabla PuntosDeVenta para obtener
un NumeroDeComprobante *en cada registro*. Supongo que de alguna manera
tengo que recorrer cada registro de la tabla Inserted, pero no sé como.

Si hay una forma mejor que el trigger también la aceptaré gustoso.

Gracias.
Norberto

Preguntas similare

Leer las respuestas

#1 BitOne®
26/11/2006 - 06:06 | Informe spam
Hola Norberto Kelijman:

Solucion 1:

Si lo deseas hacer con un trigger solo tienes que hacer algo como esto
OJO: Ejecutar en base de prueba

Use AdventureWorks

/**********
* Creacion de Tablas de Prueba
*
*/
if object_id('PuntosDeVenta','U') is not null
drop table PuntosDeVenta
go

create table PuntosDeVenta (
idPuntoDeVenta int,
UltimoNumeroAsignado int
)
go

if object_id('Comprobantes','U') is not null
drop table Comprobantes
go
create table Comprobantes(
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)

Comprobante,
el
tabla

if object_id('trg_incremento','tr') is not null
drop trigger trg_incremento
go
/******
* Creacion de solucion Trigger
*
*/
go
print '<< Este trigger se dispara y agrega un incremento de acuerdo a la >>'
print '<< cantidad de registros insertadas para el punto de venta >>'
print char(13)
print char(13)
go
CREATE TRIGGER trg_incremento
ON Comprobantes
FOR INSERT
as
update a
set UltimoNumeroAsignado = UltimoNumeroAsignado + (select count(*) from
inserted ins where ins.idPuntoDeVenta = a.idPuntoDeVenta)
from PuntosDeVenta a
go
set nocount on
go
/***********
* Inserta registros en punto de venta para diferente punto
*
*/
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 100,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 110,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 120,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 130,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 140,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 150,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 160,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 170,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 180,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 190,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 200,21)
go
set nocount off
go

print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go

print 'Inserta un registro nuevo para cualquier compronte'
insert into Comprobantes values ( 10, 100, 10010)
go
print 'Resultado comprobante incrementado'
select * from PuntosDeVenta

go
if object_id('tempdb..#VariosRegistros','U') is not null
drop table #VariosRegistros
go
create table #VariosRegistros (
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)
go
set nocount on
go
insert into #VariosRegistros values ( 10, 100, 10010)
insert into #VariosRegistros values ( 20, 100, 10020)
insert into #VariosRegistros values ( 30, 100, 10030)
insert into #VariosRegistros values ( 40, 100, 10040)
insert into #VariosRegistros values ( 50, 100, 10050)
insert into #VariosRegistros values ( 60, 100, 10060)
insert into #VariosRegistros values ( 70, 100, 10070)
insert into #VariosRegistros values ( 80, 100, 10080)
insert into #VariosRegistros values ( 90, 100, 10090)
go
set nocount off
go
print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go
Print '<< Operacion con insert into >>'
insert into Comprobantes
select *
from #VariosRegistros
go
Print '<< Muestra resultado del incremento realizado >>'
select * from PuntosDeVenta
go



Segunda solucion:

Coloca todo en una transaccion de manera que en esta puedas manejar este
tipo de evento.

Saludos,

BitOne®



"Norberto Kelijman" wrote in message
news:
Estimados:

Uso SQL Server 2005.
Esquemáticamente,

La tabla PuntosDeVenta tiene los campos idPuntoDeVenta y
UltimoNumeroAsignado.

La tabla Comprobantes tiene los campos idComprobante, idPuntoDeVenta,
NumeroDeComprobante.

La tarea, puesta en español, es que cada vez que se inserta un


Comprobante,
voy a la tabla PuntosDeVenta, le agrego 1 a UltimoNumeroAsignado (según el
punto de venta) y el nuevo valor lo pongo en NumeroDeComprobante de la


tabla
Comprobantes.

Estoy tratando de hacer un trigger Insert. Ya sé que el trigger se ejecuta
una vez por sentencia, y efectivamente a veces hago INSERT SELECT. También
sé de la existencia de la tabla Inserted.

Mi problema es cómo hacer para updatear la tabla PuntosDeVenta para


obtener
un NumeroDeComprobante *en cada registro*. Supongo que de alguna manera
tengo que recorrer cada registro de la tabla Inserted, pero no sé como.

Si hay una forma mejor que el trigger también la aceptaré gustoso.

Gracias.
Norberto


Respuesta Responder a este mensaje
#2 Norberto Kelijman
26/11/2006 - 15:08 | Informe spam
Muchas gracias por la pronta respuesta, BitOne®, pero no me expresé lo
suficientemente claro y no me entendiste la tarea.

Mi expresión "le agrego 1 a UltimoNumeroAsignado" no significa que agrego un
registo sino que al valor UltimoNumeroAsignado (para ese punto de venta) le
sumo uno.

El hecho es que tengo por ejemplo 3 puntos de venta, y cada uno tiene su
numeración de comprobantes. Así que para cada nuevo comprobante (que tiene
su idComprobante que es su identificador) le tengo que asignar el
NumeroDeComprobante que corresponda según su idPuntoDeVenta. Por eso para
cada registro nuevo de Comprobantes tengo que ir a la tabla PuntosDeVenta,
sumarle 1 al UltimoNumeroAsignado de ese punto de venta, tomar el nuevo
ÚltimoNumeroAsignado de PuntosDeVenta (del registro que acabo de modificar)
y ponerlo en NumeroDeComprobante del comprobante que acabo de insertar.

Mientras no encuentre algo mejor, lo que voy a hacer es que en el INSERT de
Comprobantes (que en la realidad tiene muchos más campos) inserto todo menos
el NumeroDeComprobante, pongo la cláusula OUTPUT TO para generar una tabla
con sólo los campos idComprobante e idPuntoDeVenta, y después recorro esa
tabla y por cada registro hago el UPDATE en Puntos de Venta y el UPDATE en
Comprobantes. Esto todavía no lo probé, está en mi cabeza por ahora. ¿Es una
solución mejor o peor que el trigger? Me han desaconsejado los triggers...

Sorry por lo largo de la explicación.
Norberto

"BitOne®" escribió en el mensaje
news:
Hola Norberto Kelijman:

Solucion 1:

Si lo deseas hacer con un trigger solo tienes que hacer algo como esto
OJO: Ejecutar en base de prueba

Use AdventureWorks

/**********
* Creacion de Tablas de Prueba
*
*/
if object_id('PuntosDeVenta','U') is not null
drop table PuntosDeVenta
go

create table PuntosDeVenta (
idPuntoDeVenta int,
UltimoNumeroAsignado int
)
go

if object_id('Comprobantes','U') is not null
drop table Comprobantes
go
create table Comprobantes(
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)

Comprobante,
(según
el
tabla

if object_id('trg_incremento','tr') is not null
drop trigger trg_incremento
go
/******
* Creacion de solucion Trigger
*
*/
go
print '<< Este trigger se dispara y agrega un incremento de acuerdo a la
>>'
print '<< cantidad de registros insertadas para el punto de venta >>'
print char(13)
print char(13)
go
CREATE TRIGGER trg_incremento
ON Comprobantes
FOR INSERT
as
update a
set UltimoNumeroAsignado = UltimoNumeroAsignado + (select count(*)
from
inserted ins where ins.idPuntoDeVenta = a.idPuntoDeVenta)
from PuntosDeVenta a
go
set nocount on
go
/***********
* Inserta registros en punto de venta para diferente punto
*
*/
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 100,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 110,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 120,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 130,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 140,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 150,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 160,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 170,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 180,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 190,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 200,21)
go
set nocount off
go

print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go

print 'Inserta un registro nuevo para cualquier compronte'
insert into Comprobantes values ( 10, 100, 10010)
go
print 'Resultado comprobante incrementado'
select * from PuntosDeVenta

go
if object_id('tempdb..#VariosRegistros','U') is not null
drop table #VariosRegistros
go
create table #VariosRegistros (
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)
go
set nocount on
go
insert into #VariosRegistros values ( 10, 100, 10010)
insert into #VariosRegistros values ( 20, 100, 10020)
insert into #VariosRegistros values ( 30, 100, 10030)
insert into #VariosRegistros values ( 40, 100, 10040)
insert into #VariosRegistros values ( 50, 100, 10050)
insert into #VariosRegistros values ( 60, 100, 10060)
insert into #VariosRegistros values ( 70, 100, 10070)
insert into #VariosRegistros values ( 80, 100, 10080)
insert into #VariosRegistros values ( 90, 100, 10090)
go
set nocount off
go
print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go
Print '<< Operacion con insert into >>'
insert into Comprobantes
select *
from #VariosRegistros
go
Print '<< Muestra resultado del incremento realizado >>'
select * from PuntosDeVenta
go



Segunda solucion:

Coloca todo en una transaccion de manera que en esta puedas manejar este
tipo de evento.

Saludos,

BitOne®



"Norberto Kelijman" wrote in
message
news:
Estimados:

Uso SQL Server 2005.
Esquemáticamente,

La tabla PuntosDeVenta tiene los campos idPuntoDeVenta y
UltimoNumeroAsignado.

La tabla Comprobantes tiene los campos idComprobante, idPuntoDeVenta,
NumeroDeComprobante.

La tarea, puesta en español, es que cada vez que se inserta un


Comprobante,
voy a la tabla PuntosDeVenta, le agrego 1 a UltimoNumeroAsignado (según
el
punto de venta) y el nuevo valor lo pongo en NumeroDeComprobante de la


tabla
Comprobantes.

Estoy tratando de hacer un trigger Insert. Ya sé que el trigger se
ejecuta
una vez por sentencia, y efectivamente a veces hago INSERT SELECT.
También
sé de la existencia de la tabla Inserted.

Mi problema es cómo hacer para updatear la tabla PuntosDeVenta para


obtener
un NumeroDeComprobante *en cada registro*. Supongo que de alguna manera
tengo que recorrer cada registro de la tabla Inserted, pero no sé como.

Si hay una forma mejor que el trigger también la aceptaré gustoso.

Gracias.
Norberto






Respuesta Responder a este mensaje
#3 Maxi
27/11/2006 - 14:10 | Informe spam
Hola, si queres hacer esto te recomiendo este articulo de mi autoria:

http://www.microsoft.com/spanish/ms...art187.asp


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"Norberto Kelijman" escribió en el
mensaje news:OO1$
Muchas gracias por la pronta respuesta, BitOne®, pero no me expresé lo
suficientemente claro y no me entendiste la tarea.

Mi expresión "le agrego 1 a UltimoNumeroAsignado" no significa que agrego
un registo sino que al valor UltimoNumeroAsignado (para ese punto de
venta) le sumo uno.

El hecho es que tengo por ejemplo 3 puntos de venta, y cada uno tiene su
numeración de comprobantes. Así que para cada nuevo comprobante (que tiene
su idComprobante que es su identificador) le tengo que asignar el
NumeroDeComprobante que corresponda según su idPuntoDeVenta. Por eso para
cada registro nuevo de Comprobantes tengo que ir a la tabla PuntosDeVenta,
sumarle 1 al UltimoNumeroAsignado de ese punto de venta, tomar el nuevo
ÚltimoNumeroAsignado de PuntosDeVenta (del registro que acabo de
modificar) y ponerlo en NumeroDeComprobante del comprobante que acabo de
insertar.

Mientras no encuentre algo mejor, lo que voy a hacer es que en el INSERT
de Comprobantes (que en la realidad tiene muchos más campos) inserto todo
menos el NumeroDeComprobante, pongo la cláusula OUTPUT TO para generar una
tabla con sólo los campos idComprobante e idPuntoDeVenta, y después
recorro esa tabla y por cada registro hago el UPDATE en Puntos de Venta y
el UPDATE en Comprobantes. Esto todavía no lo probé, está en mi cabeza por
ahora. ¿Es una solución mejor o peor que el trigger? Me han desaconsejado
los triggers...

Sorry por lo largo de la explicación.
Norberto

"BitOne®" escribió en el mensaje
news:
Hola Norberto Kelijman:

Solucion 1:

Si lo deseas hacer con un trigger solo tienes que hacer algo como esto
OJO: Ejecutar en base de prueba

Use AdventureWorks

/**********
* Creacion de Tablas de Prueba
*
*/
if object_id('PuntosDeVenta','U') is not null
drop table PuntosDeVenta
go

create table PuntosDeVenta (
idPuntoDeVenta int,
UltimoNumeroAsignado int
)
go

if object_id('Comprobantes','U') is not null
drop table Comprobantes
go
create table Comprobantes(
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)

Comprobante,
(según
el
la
tabla

if object_id('trg_incremento','tr') is not null
drop trigger trg_incremento
go
/******
* Creacion de solucion Trigger
*
*/
go
print '<< Este trigger se dispara y agrega un incremento de acuerdo a la
>>'
print '<< cantidad de registros insertadas para el punto de venta >>'
print char(13)
print char(13)
go
CREATE TRIGGER trg_incremento
ON Comprobantes
FOR INSERT
as
update a
set UltimoNumeroAsignado = UltimoNumeroAsignado + (select count(*)
from
inserted ins where ins.idPuntoDeVenta = a.idPuntoDeVenta)
from PuntosDeVenta a
go
set nocount on
go
/***********
* Inserta registros en punto de venta para diferente punto
*
*/
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 100,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 110,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 120,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 130,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 140,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 150,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 160,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 170,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 180,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 190,21)
insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
( 200,21)
go
set nocount off
go

print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go

print 'Inserta un registro nuevo para cualquier compronte'
insert into Comprobantes values ( 10, 100, 10010)
go
print 'Resultado comprobante incrementado'
select * from PuntosDeVenta

go
if object_id('tempdb..#VariosRegistros','U') is not null
drop table #VariosRegistros
go
create table #VariosRegistros (
idComprobante int,
idPuntoDeVenta int,
NumeroDeComprobante int
)
go
set nocount on
go
insert into #VariosRegistros values ( 10, 100, 10010)
insert into #VariosRegistros values ( 20, 100, 10020)
insert into #VariosRegistros values ( 30, 100, 10030)
insert into #VariosRegistros values ( 40, 100, 10040)
insert into #VariosRegistros values ( 50, 100, 10050)
insert into #VariosRegistros values ( 60, 100, 10060)
insert into #VariosRegistros values ( 70, 100, 10070)
insert into #VariosRegistros values ( 80, 100, 10080)
insert into #VariosRegistros values ( 90, 100, 10090)
go
set nocount off
go
print '<< registros con numero de comprobande 21 inicialmente todos >>'
select * from PuntosDeVenta

go
Print '<< Operacion con insert into >>'
insert into Comprobantes
select *
from #VariosRegistros
go
Print '<< Muestra resultado del incremento realizado >>'
select * from PuntosDeVenta
go



Segunda solucion:

Coloca todo en una transaccion de manera que en esta puedas manejar este
tipo de evento.

Saludos,

BitOne®



"Norberto Kelijman" wrote in
message
news:
Estimados:

Uso SQL Server 2005.
Esquemáticamente,

La tabla PuntosDeVenta tiene los campos idPuntoDeVenta y
UltimoNumeroAsignado.

La tabla Comprobantes tiene los campos idComprobante, idPuntoDeVenta,
NumeroDeComprobante.

La tarea, puesta en español, es que cada vez que se inserta un


Comprobante,
voy a la tabla PuntosDeVenta, le agrego 1 a UltimoNumeroAsignado (según
el
punto de venta) y el nuevo valor lo pongo en NumeroDeComprobante de la


tabla
Comprobantes.

Estoy tratando de hacer un trigger Insert. Ya sé que el trigger se
ejecuta
una vez por sentencia, y efectivamente a veces hago INSERT SELECT.
También
sé de la existencia de la tabla Inserted.

Mi problema es cómo hacer para updatear la tabla PuntosDeVenta para


obtener
un NumeroDeComprobante *en cada registro*. Supongo que de alguna manera
tengo que recorrer cada registro de la tabla Inserted, pero no sé como.

Si hay una forma mejor que el trigger también la aceptaré gustoso.

Gracias.
Norberto










Respuesta Responder a este mensaje
#4 BitOne®
27/11/2006 - 14:24 | Informe spam
Norberto Kelijman:

Si te fijas en el scripts que te he pasado no inserta un registro sino que
suma uno al valor existente del punto.

Fijate bien y me avisas.

Los datos de insert que ves en el script son para
poder realizar el ejemplo.

Saludos,

BitOne®

"Norberto Kelijman" wrote in message
news:OO1$
Muchas gracias por la pronta respuesta, BitOne®, pero no me expresé lo
suficientemente claro y no me entendiste la tarea.

Mi expresión "le agrego 1 a UltimoNumeroAsignado" no significa que agrego


un
registo sino que al valor UltimoNumeroAsignado (para ese punto de venta)


le
sumo uno.

El hecho es que tengo por ejemplo 3 puntos de venta, y cada uno tiene su
numeración de comprobantes. Así que para cada nuevo comprobante (que tiene
su idComprobante que es su identificador) le tengo que asignar el
NumeroDeComprobante que corresponda según su idPuntoDeVenta. Por eso para
cada registro nuevo de Comprobantes tengo que ir a la tabla PuntosDeVenta,
sumarle 1 al UltimoNumeroAsignado de ese punto de venta, tomar el nuevo
ÚltimoNumeroAsignado de PuntosDeVenta (del registro que acabo de


modificar)
y ponerlo en NumeroDeComprobante del comprobante que acabo de insertar.

Mientras no encuentre algo mejor, lo que voy a hacer es que en el INSERT


de
Comprobantes (que en la realidad tiene muchos más campos) inserto todo


menos
el NumeroDeComprobante, pongo la cláusula OUTPUT TO para generar una tabla
con sólo los campos idComprobante e idPuntoDeVenta, y después recorro esa
tabla y por cada registro hago el UPDATE en Puntos de Venta y el UPDATE en
Comprobantes. Esto todavía no lo probé, está en mi cabeza por ahora. ¿Es


una
solución mejor o peor que el trigger? Me han desaconsejado los triggers...

Sorry por lo largo de la explicación.
Norberto

"BitOne®" escribió en el mensaje
news:
> Hola Norberto Kelijman:
>
> Solucion 1:
>
> Si lo deseas hacer con un trigger solo tienes que hacer algo como esto
> OJO: Ejecutar en base de prueba
>
> Use AdventureWorks
>
> /**********
> * Creacion de Tablas de Prueba
> *
> */
> if object_id('PuntosDeVenta','U') is not null
> drop table PuntosDeVenta
> go
>
> create table PuntosDeVenta (
> idPuntoDeVenta int,
> UltimoNumeroAsignado int
> )
> go
>
> if object_id('Comprobantes','U') is not null
> drop table Comprobantes
> go
> create table Comprobantes(
> idComprobante int,
> idPuntoDeVenta int,
> NumeroDeComprobante int
> )
>
> Comprobante,
> (según
> el


la
> tabla
>
> if object_id('trg_incremento','tr') is not null
> drop trigger trg_incremento
> go
> /******
> * Creacion de solucion Trigger
> *
> */
> go
> print '<< Este trigger se dispara y agrega un incremento de acuerdo a la
> >>'
> print '<< cantidad de registros insertadas para el punto de venta >>'
> print char(13)
> print char(13)
> go
> CREATE TRIGGER trg_incremento
> ON Comprobantes
> FOR INSERT
> as
> update a
> set UltimoNumeroAsignado = UltimoNumeroAsignado + (select count(*)
> from
> inserted ins where ins.idPuntoDeVenta = a.idPuntoDeVenta)
> from PuntosDeVenta a
> go
> set nocount on
> go
> /***********
> * Inserta registros en punto de venta para diferente punto
> *
> */
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 100,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 110,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 120,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 130,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 140,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 150,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 160,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 170,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 180,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 190,21)
> insert into PuntosDeVenta (idPuntoDeVenta, UltimoNumeroAsignado) values
> ( 200,21)
> go
> set nocount off
> go
>
> print '<< registros con numero de comprobande 21 inicialmente todos >>'
> select * from PuntosDeVenta
>
> go
>
> print 'Inserta un registro nuevo para cualquier compronte'
> insert into Comprobantes values ( 10, 100, 10010)
> go
> print 'Resultado comprobante incrementado'
> select * from PuntosDeVenta
>
> go
> if object_id('tempdb..#VariosRegistros','U') is not null
> drop table #VariosRegistros
> go
> create table #VariosRegistros (
> idComprobante int,
> idPuntoDeVenta int,
> NumeroDeComprobante int
> )
> go
> set nocount on
> go
> insert into #VariosRegistros values ( 10, 100, 10010)
> insert into #VariosRegistros values ( 20, 100, 10020)
> insert into #VariosRegistros values ( 30, 100, 10030)
> insert into #VariosRegistros values ( 40, 100, 10040)
> insert into #VariosRegistros values ( 50, 100, 10050)
> insert into #VariosRegistros values ( 60, 100, 10060)
> insert into #VariosRegistros values ( 70, 100, 10070)
> insert into #VariosRegistros values ( 80, 100, 10080)
> insert into #VariosRegistros values ( 90, 100, 10090)
> go
> set nocount off
> go
> print '<< registros con numero de comprobande 21 inicialmente todos >>'
> select * from PuntosDeVenta
>
> go
> Print '<< Operacion con insert into >>'
> insert into Comprobantes
> select *
> from #VariosRegistros
> go
> Print '<< Muestra resultado del incremento realizado >>'
> select * from PuntosDeVenta
> go
>
>
>
> Segunda solucion:
>
> Coloca todo en una transaccion de manera que en esta puedas manejar este
> tipo de evento.
>
> Saludos,
>
> BitOne®
>
>
>
> "Norberto Kelijman" wrote in
> message
> news:
>> Estimados:
>>
>> Uso SQL Server 2005.
>> Esquemáticamente,
>>
>> La tabla PuntosDeVenta tiene los campos idPuntoDeVenta y
>> UltimoNumeroAsignado.
>>
>> La tabla Comprobantes tiene los campos idComprobante, idPuntoDeVenta,
>> NumeroDeComprobante.
>>
>> La tarea, puesta en español, es que cada vez que se inserta un
> Comprobante,
>> voy a la tabla PuntosDeVenta, le agrego 1 a UltimoNumeroAsignado (según
>> el
>> punto de venta) y el nuevo valor lo pongo en NumeroDeComprobante de la
> tabla
>> Comprobantes.
>>
>> Estoy tratando de hacer un trigger Insert. Ya sé que el trigger se
>> ejecuta
>> una vez por sentencia, y efectivamente a veces hago INSERT SELECT.
>> También
>> sé de la existencia de la tabla Inserted.
>>
>> Mi problema es cómo hacer para updatear la tabla PuntosDeVenta para
> obtener
>> un NumeroDeComprobante *en cada registro*. Supongo que de alguna manera
>> tengo que recorrer cada registro de la tabla Inserted, pero no sé como.
>>
>> Si hay una forma mejor que el trigger también la aceptaré gustoso.
>>
>> Gracias.
>> Norberto
>>
>>
>
>


Respuesta Responder a este mensaje
#5 Norberto Kelijman
30/11/2006 - 01:25 | Informe spam
¡Gracias!
Norberto
"Maxi" wrote in message
news:
Hola, si queres hacer esto te recomiendo este articulo de mi autoria:

http://www.microsoft.com/spanish/ms...art187.asp


Salu2

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida