Generar mi autonumerico

21/05/2008 - 22:02 por CHAR72 | Informe spam
Hola compañeros! tengo cierto inconveniente que no puedo resolver. Tengo un
sistema que tiene un id que lo detemina de una tabla donde guarda el ultimo
id y le va sumando uno por cada nuevo registro. Cuando es un insert de un
registro no hay inconveniente, pero ahora debo realizar varios insert y no
se como obtener ese numero, intente crear una funcion que lo obtenga pero
solo permite otras funciones o procedimientos extendidos.

Como puedo resolver la cuestion con SQL 2000?

Saludos

Carlos

Preguntas similare

Leer las respuestas

#36 Gux (MVP)
24/05/2008 - 02:34 | Informe spam
Sí, lo tengo claro. Mi mensaje era para corregir lo que puso Umak que estaba
incorrecto.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Carlos M. Calvelo" wrote:

On 23 mei, 22:06, Gux (MVP) wrote:
> El resultado final de la ejecución de dos transacciones concurrentes debe ser
> similar a la ejecución SERIAL (en serie o secuencia) de las mismas.
>

Pues eso es lo que significa que las transacciones sean
'serializables'.

Gux? Gustavo? (no me lo creo!)
Pero si así es... Gux, tu has fumado algo? :-)

Saludos,
Carlos

Respuesta Responder a este mensaje
#37 Gux (MVP)
24/05/2008 - 02:44 | Informe spam
Aclaro un poco más, porque a medida que el hilo se extiende se va
dificultando saber de qué habla cada uno:

Cuando digo SERIAL me refiero a una ejecución SECUENCIAL de transacciones.
Ejecuta una transacción, luego otra, luego la otra, por lo que no hay
concurrencia. Esto nunca produce resultados incorrectos

Cuando digo SERIALIZABLE me refiero a una ejecucion CONCURRENTE de
transacciones cuyo resultado final es igual al de alguna ejecución serial de
las mismas.

Eso es lo que le estaba corrigiendo el mensaje de Umak, que confundió
SERIALIZABLE donde debió decir SERIAL. Espero que el amigo Umak lo haya
entendido ahora.


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Gux (MVP)" wrote:

Sí, lo tengo claro. Mi mensaje era para corregir lo que puso Umak que estaba
incorrecto.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Carlos M. Calvelo" wrote:

> On 23 mei, 22:06, Gux (MVP) wrote:
> > El resultado final de la ejecución de dos transacciones concurrentes debe ser
> > similar a la ejecución SERIAL (en serie o secuencia) de las mismas.
> >
>
> Pues eso es lo que significa que las transacciones sean
> 'serializables'.
>
> Gux? Gustavo? (no me lo creo!)
> Pero si así es... Gux, tu has fumado algo? :-)
>
> Saludos,
> Carlos
>
Respuesta Responder a este mensaje
#38 Miguel Egea
24/05/2008 - 10:54 | Informe spam
yo acompaño este tipo de procedimientos con otros que devuelven un rango, de
esta forma puedo insertarlos como sifuesen consecutivos sin que esto afecte
al tratamiento de lotes.


"Alejandro Mesa" wrote in message
news:
Hola Miguel,

Que gusto tenerte por aca.

El problema que afronta el OP, es que no se puede usar esa funcionalidad
cuando se inserta un batch o conjunto de filas, pues no podemos ejecutar
el
procedimiento almacenado por cada fila que se inserta, si no es que se usa
un
lazo o procesamiento de las filas de una en una.

Posiblemente se pueda crear un funcion de usuario y usar una de las
puertas
de atras existentes (no recomendable) para poder traer ese numero. Para
eso,
pudieramos crear un servidor ligado que apunte a si mismo y usar OPENQUERY
para hacer la insercion en la tabla y traer el valor identiy o posterior
si
no es identity.


Ejemplo:

use master
go

/****** Object: LinkedServer [LOOPBACK] Script Date: 05/23/2008
18:42:29
******/
EXEC master.dbo.sp_addlinkedserver @server = N'LOOPBACK',
@srvproduct=N'SQL
Server'
/* For security reasons the linked server remote logins password is
changed
with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'LOOPBACK',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'collation
compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'data
access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'dist',
@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'pub',
@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc',
@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc out',
@optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'sub',
@optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'connect
timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'collation
name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'lazy
schema
validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'query
timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'use remote
collation', @optvalue=N'true'
go

use tempdb
go

create table dbo.Claves (
Clave int not null identity(1, 1) primary key
)
go

create function dbo.ufn_ProximaClave(
@p1 varchar(50)
)
returns int
as
begin
declare @i int

select @i = Clave
from openquery(LOOPBACK, 'begin transaction insert into tempdb.dbo.Claves
output inserted.Clave default values; rollback transaction')

return @i
end
go

create table dbo.t1 (
c1 int not null primary key,
c2 varchar(50) not null unique
)
go

insert into dbo.t1(c1, c2)
select dbo.ufn_ProximaClave(t.c1), t.c1
from
(
select 'SQL Server 2000' as c1
union all
select 'SQL Server 2005' as c1
union all
select 'SQL Server 2008' as c1
) as t
go

select *
from dbo.t1
go

drop function dbo.ufn_ProximaClave
go

drop table dbo.Claves, dbo.t1
go


Saludos,
AMB


"Miguel Egea" wrote:

Si usas SQL 2005 puedes hacer un procedimiento como el siguiente y
llamarlo
para obtener un identificador con tabla, tiene todos los inconvenientes y
ventas de los identities, no te obliga acambiar la estructura aunque
ocupas
un schema. Si no usas SQL 2005 es adaptable. Creo que no tiene problemas
de
inyeccin de cdigo SQL en cualquier caso ah tenis las pruebas.


create schema Maestros;

go
create proc Maestros.GeneraClave (@tabla Sysname,@valor int output)
with execute as owner -- cambialo por alguien con permisos para crear
tablas
de forma dinmica
as
begin
declare @sql nvarchar(4000);



if not exists(select 1 from information_Schema.tables where table_name
>> @tabla and Table_schema='Maestros')
begin

set @sql = 'CREATE TABLE Maestros.'+ quotename(@tabla) + ' (id int
identity(1,1)) ' ;
exec sp_executeSQL @sql
end

if @@trancount>0
save transaction @tabla
else
begin tran

set @sql=N'SET NOCOUNT ON; INSERT INTO Maestros.'+ quotename(@tabla) + '
DEFAULT VALUES; SELECT @Valor=Scope_identity() '
exec sp_executesql @sql, N' @valor int output', @valor output

rollback tran

end
go

declare @valor int
exec Maestros.GeneraClave 'Mi tabla1',@valor output
select @valor
select * from information_schema.tables where table_schema='Maestros'
go
declare @valor int
exec Maestros.GeneraClave 'Mi ] drop table Maestros.[Mi tabla1] --
',@valor
output
select @valor
select * from information_schema.tables where table_schema='Maestros'


Saludos
Miguel Egea



"CHAR72" <char72[nos pa m]@gmail.com> wrote in message
news:OB%
> Lamentablemente las cosas estan asi, habria que cambiar toda la
> estructura
> del sistema para ponerle IDENTITY.
>
> Gracias
>
> "Alejandro Mesa" escribi en
> el
> mensaje news:
>> CHAR72,
>>
>> Esa es una de las desventajas de generar el autonumerico de manera
>> propia,
>> y no usar la facilidad de las columnas con propiedad IDENTITY. Tendras
>> que
>> usar un lazo / cursor e insertar las filas una por una.
>>
>>
>> AMB
>>
>> "CHAR72" wrote:
>>
>>> Hola compaeros! tengo cierto inconveniente que no puedo resolver.
>>> Tengo
>>> un
>>> sistema que tiene un id que lo detemina de una tabla donde guarda el
>>> ultimo
>>> id y le va sumando uno por cada nuevo registro. Cuando es un insert
>>> de
>>> un
>>> registro no hay inconveniente, pero ahora debo realizar varios insert
>>> y
>>> no
>>> se como obtener ese numero, intente crear una funcion que lo obtenga
>>> pero
>>> solo permite otras funciones o procedimientos extendidos.
>>>
>>> Como puedo resolver la cuestion con SQL 2000?
>>>
>>> Saludos
>>>
>>> Carlos
>>>
>>>
>>>
>>>
>
>

Respuesta Responder a este mensaje
#39 Alejandro Mesa
24/05/2008 - 16:24 | Informe spam
Miguel Egea,

Creo que de esa manera puedes saber el rango insertado, pero no la clave
asignada a una fila en especifico. Crees que pudieras postear un ejemplo,
sobre todo de como hacerlo cuando usamos herramientas como BCP o SSIS package
para cargas masivas?

Gracías de antemano,
AMB


"Miguel Egea" wrote:

yo acompaño este tipo de procedimientos con otros que devuelven un rango, de
esta forma puedo insertarlos como sifuesen consecutivos sin que esto afecte
al tratamiento de lotes.


"Alejandro Mesa" wrote in message
news:
> Hola Miguel,
>
> Que gusto tenerte por aca.
>
> El problema que afronta el OP, es que no se puede usar esa funcionalidad
> cuando se inserta un batch o conjunto de filas, pues no podemos ejecutar
> el
> procedimiento almacenado por cada fila que se inserta, si no es que se usa
> un
> lazo o procesamiento de las filas de una en una.
>
> Posiblemente se pueda crear un funcion de usuario y usar una de las
> puertas
> de atras existentes (no recomendable) para poder traer ese numero. Para
> eso,
> pudieramos crear un servidor ligado que apunte a si mismo y usar OPENQUERY
> para hacer la insercion en la tabla y traer el valor identiy o posterior
> si
> no es identity.
>
>
> Ejemplo:
>
> use master
> go
>
> /****** Object: LinkedServer [LOOPBACK] Script Date: 05/23/2008
> 18:42:29
> ******/
> EXEC master.dbo.sp_addlinkedserver @server = N'LOOPBACK',
> @srvproduct=N'SQL
> Server'
> /* For security reasons the linked server remote logins password is
> changed
> with ######## */
> EXEC master.dbo.sp_addlinkedsrvlogin
> @rmtsrvname=N'LOOPBACK',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
>
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'collation
> compatible', @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'data
> access', @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'dist',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'pub',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc',
> @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc out',
> @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'sub',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'connect
> timeout', @optvalue=N'0'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'collation
> name', @optvalue=null
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'lazy
> schema
> validation', @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'query
> timeout', @optvalue=N'0'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'use remote
> collation', @optvalue=N'true'
> go
>
> use tempdb
> go
>
> create table dbo.Claves (
> Clave int not null identity(1, 1) primary key
> )
> go
>
> create function dbo.ufn_ProximaClave(
> @p1 varchar(50)
> )
> returns int
> as
> begin
> declare @i int
>
> select @i = Clave
> from openquery(LOOPBACK, 'begin transaction insert into tempdb.dbo.Claves
> output inserted.Clave default values; rollback transaction')
>
> return @i
> end
> go
>
> create table dbo.t1 (
> c1 int not null primary key,
> c2 varchar(50) not null unique
> )
> go
>
> insert into dbo.t1(c1, c2)
> select dbo.ufn_ProximaClave(t.c1), t.c1
> from
> (
> select 'SQL Server 2000' as c1
> union all
> select 'SQL Server 2005' as c1
> union all
> select 'SQL Server 2008' as c1
> ) as t
> go
>
> select *
> from dbo.t1
> go
>
> drop function dbo.ufn_ProximaClave
> go
>
> drop table dbo.Claves, dbo.t1
> go
>
>
> Saludos,
> AMB
>
>
> "Miguel Egea" wrote:
>
>> Si usas SQL 2005 puedes hacer un procedimiento como el siguiente y
>> llamarlo
>> para obtener un identificador con tabla, tiene todos los inconvenientes y
>> ventas de los identities, no te obliga acambiar la estructura aunque
>> ocupas
>> un schema. Si no usas SQL 2005 es adaptable. Creo que no tiene problemas
>> de
>> inyeccin de cdigo SQL en cualquier caso ah tenis las pruebas.
>>
>>
>> create schema Maestros;
>>
>> go
>> create proc Maestros.GeneraClave (@tabla Sysname,@valor int output)
>> with execute as owner -- cambialo por alguien con permisos para crear
>> tablas
>> de forma dinmica
>> as
>> begin
>> declare @sql nvarchar(4000);
>>
>>
>>
>> if not exists(select 1 from information_Schema.tables where table_name
>> > >> @tabla and Table_schema='Maestros')
>> begin
>>
>> set @sql = 'CREATE TABLE Maestros.'+ quotename(@tabla) + ' (id int
>> identity(1,1)) ' ;
>> exec sp_executeSQL @sql
>> end
>>
>> if @@trancount>0
>> save transaction @tabla
>> else
>> begin tran
>>
>> set @sql=N'SET NOCOUNT ON; INSERT INTO Maestros.'+ quotename(@tabla) + '
>> DEFAULT VALUES; SELECT @Valor=Scope_identity() '
>> exec sp_executesql @sql, N' @valor int output', @valor output
>>
>> rollback tran
>>
>> end
>> go
>>
>> declare @valor int
>> exec Maestros.GeneraClave 'Mi tabla1',@valor output
>> select @valor
>> select * from information_schema.tables where table_schema='Maestros'
>> go
>> declare @valor int
>> exec Maestros.GeneraClave 'Mi ] drop table Maestros.[Mi tabla1] --
>> ',@valor
>> output
>> select @valor
>> select * from information_schema.tables where table_schema='Maestros'
>>
>>
>> Saludos
>> Miguel Egea
>>
>>
>>
>> "CHAR72" <char72[nos pa m]@gmail.com> wrote in message
>> news:OB%
>> > Lamentablemente las cosas estan asi, habria que cambiar toda la
>> > estructura
>> > del sistema para ponerle IDENTITY.
>> >
>> > Gracias
>> >
>> > "Alejandro Mesa" escribi en
>> > el
>> > mensaje news:
>> >> CHAR72,
>> >>
>> >> Esa es una de las desventajas de generar el autonumerico de manera
>> >> propia,
>> >> y no usar la facilidad de las columnas con propiedad IDENTITY. Tendras
>> >> que
>> >> usar un lazo / cursor e insertar las filas una por una.
>> >>
>> >>
>> >> AMB
>> >>
>> >> "CHAR72" wrote:
>> >>
>> >>> Hola compaeros! tengo cierto inconveniente que no puedo resolver.
>> >>> Tengo
>> >>> un
>> >>> sistema que tiene un id que lo detemina de una tabla donde guarda el
>> >>> ultimo
>> >>> id y le va sumando uno por cada nuevo registro. Cuando es un insert
>> >>> de
>> >>> un
>> >>> registro no hay inconveniente, pero ahora debo realizar varios insert
>> >>> y
>> >>> no
>> >>> se como obtener ese numero, intente crear una funcion que lo obtenga
>> >>> pero
>> >>> solo permite otras funciones o procedimientos extendidos.
>> >>>
>> >>> Como puedo resolver la cuestion con SQL 2000?
>> >>>
>> >>> Saludos
>> >>>
>> >>> Carlos
>> >>>
>> >>>
>> >>>
>> >>>
>> >
>> >
>>

Respuesta Responder a este mensaje
#40 Miguel Egea
24/05/2008 - 20:37 | Informe spam
Efectivamente no se que valor se le asigna a cada una :). Busco por ahí
donde lo tengo y lo posteo

Gracias Alejandro!


"Alejandro Mesa" wrote in message
news:
Miguel Egea,

Creo que de esa manera puedes saber el rango insertado, pero no la clave
asignada a una fila en especifico. Crees que pudieras postear un ejemplo,
sobre todo de como hacerlo cuando usamos herramientas como BCP o SSIS
package
para cargas masivas?

Gracías de antemano,
AMB


"Miguel Egea" wrote:

yo acompaño este tipo de procedimientos con otros que devuelven un rango,
de
esta forma puedo insertarlos como sifuesen consecutivos sin que esto
afecte
al tratamiento de lotes.


"Alejandro Mesa" wrote in
message
news:
> Hola Miguel,
>
> Que gusto tenerte por aca.
>
> El problema que afronta el OP, es que no se puede usar esa
> funcionalidad
> cuando se inserta un batch o conjunto de filas, pues no podemos
> ejecutar
> el
> procedimiento almacenado por cada fila que se inserta, si no es que se
> usa
> un
> lazo o procesamiento de las filas de una en una.
>
> Posiblemente se pueda crear un funcion de usuario y usar una de las
> puertas
> de atras existentes (no recomendable) para poder traer ese numero. Para
> eso,
> pudieramos crear un servidor ligado que apunte a si mismo y usar
> OPENQUERY
> para hacer la insercion en la tabla y traer el valor identiy o
> posterior
> si
> no es identity.
>
>
> Ejemplo:
>
> use master
> go
>
> /****** Object: LinkedServer [LOOPBACK] Script Date: 05/23/2008
> 18:42:29
> ******/
> EXEC master.dbo.sp_addlinkedserver @server = N'LOOPBACK',
> @srvproduct=N'SQL
> Server'
> /* For security reasons the linked server remote logins password is
> changed
> with ######## */
> EXEC master.dbo.sp_addlinkedsrvlogin
> @rmtsrvname=N'LOOPBACK',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
>
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK',
> @optname=N'collation
> compatible', @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'data
> access', @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'dist',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'pub',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc',
> @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'rpc
> out',
> @optvalue=N'true'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'sub',
> @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'connect
> timeout', @optvalue=N'0'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK',
> @optname=N'collation
> name', @optvalue=null
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'lazy
> schema
> validation', @optvalue=N'false'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'query
> timeout', @optvalue=N'0'
> GO
> EXEC master.dbo.sp_serveroption @server=N'LOOPBACK', @optname=N'use
> remote
> collation', @optvalue=N'true'
> go
>
> use tempdb
> go
>
> create table dbo.Claves (
> Clave int not null identity(1, 1) primary key
> )
> go
>
> create function dbo.ufn_ProximaClave(
> @p1 varchar(50)
> )
> returns int
> as
> begin
> declare @i int
>
> select @i = Clave
> from openquery(LOOPBACK, 'begin transaction insert into
> tempdb.dbo.Claves
> output inserted.Clave default values; rollback transaction')
>
> return @i
> end
> go
>
> create table dbo.t1 (
> c1 int not null primary key,
> c2 varchar(50) not null unique
> )
> go
>
> insert into dbo.t1(c1, c2)
> select dbo.ufn_ProximaClave(t.c1), t.c1
> from
> (
> select 'SQL Server 2000' as c1
> union all
> select 'SQL Server 2005' as c1
> union all
> select 'SQL Server 2008' as c1
> ) as t
> go
>
> select *
> from dbo.t1
> go
>
> drop function dbo.ufn_ProximaClave
> go
>
> drop table dbo.Claves, dbo.t1
> go
>
>
> Saludos,
> AMB
>
>
> "Miguel Egea" wrote:
>
>> Si usas SQL 2005 puedes hacer un procedimiento como el siguiente y
>> llamarlo
>> para obtener un identificador con tabla, tiene todos los
>> inconvenientes y
>> ventas de los identities, no te obliga acambiar la estructura aunque
>> ocupas
>> un schema. Si no usas SQL 2005 es adaptable. Creo que no tiene
>> problemas
>> de
>> inyeccin de cdigo SQL en cualquier caso ah tenis las pruebas.
>>
>>
>> create schema Maestros;
>>
>> go
>> create proc Maestros.GeneraClave (@tabla Sysname,@valor int output)
>> with execute as owner -- cambialo por alguien con permisos para crear
>> tablas
>> de forma dinmica
>> as
>> begin
>> declare @sql nvarchar(4000);
>>
>>
>>
>> if not exists(select 1 from information_Schema.tables where
>> table_name
>> >> >> @tabla and Table_schema='Maestros')
>> begin
>>
>> set @sql = 'CREATE TABLE Maestros.'+ quotename(@tabla) + ' (id int
>> identity(1,1)) ' ;
>> exec sp_executeSQL @sql
>> end
>>
>> if @@trancount>0
>> save transaction @tabla
>> else
>> begin tran
>>
>> set @sql=N'SET NOCOUNT ON; INSERT INTO Maestros.'+ quotename(@tabla)
>> + '
>> DEFAULT VALUES; SELECT @Valor=Scope_identity() '
>> exec sp_executesql @sql, N' @valor int output', @valor output
>>
>> rollback tran
>>
>> end
>> go
>>
>> declare @valor int
>> exec Maestros.GeneraClave 'Mi tabla1',@valor output
>> select @valor
>> select * from information_schema.tables where table_schema='Maestros'
>> go
>> declare @valor int
>> exec Maestros.GeneraClave 'Mi ] drop table Maestros.[Mi tabla1] --
>> ',@valor
>> output
>> select @valor
>> select * from information_schema.tables where table_schema='Maestros'
>>
>>
>> Saludos
>> Miguel Egea
>>
>>
>>
>> "CHAR72" <char72[nos pa m]@gmail.com> wrote in message
>> news:OB%
>> > Lamentablemente las cosas estan asi, habria que cambiar toda la
>> > estructura
>> > del sistema para ponerle IDENTITY.
>> >
>> > Gracias
>> >
>> > "Alejandro Mesa" escribi
>> > en
>> > el
>> > mensaje news:
>> >> CHAR72,
>> >>
>> >> Esa es una de las desventajas de generar el autonumerico de manera
>> >> propia,
>> >> y no usar la facilidad de las columnas con propiedad IDENTITY.
>> >> Tendras
>> >> que
>> >> usar un lazo / cursor e insertar las filas una por una.
>> >>
>> >>
>> >> AMB
>> >>
>> >> "CHAR72" wrote:
>> >>
>> >>> Hola compaeros! tengo cierto inconveniente que no puedo resolver.
>> >>> Tengo
>> >>> un
>> >>> sistema que tiene un id que lo detemina de una tabla donde guarda
>> >>> el
>> >>> ultimo
>> >>> id y le va sumando uno por cada nuevo registro. Cuando es un
>> >>> insert
>> >>> de
>> >>> un
>> >>> registro no hay inconveniente, pero ahora debo realizar varios
>> >>> insert
>> >>> y
>> >>> no
>> >>> se como obtener ese numero, intente crear una funcion que lo
>> >>> obtenga
>> >>> pero
>> >>> solo permite otras funciones o procedimientos extendidos.
>> >>>
>> >>> Como puedo resolver la cuestion con SQL 2000?
>> >>>
>> >>> Saludos
>> >>>
>> >>> Carlos
>> >>>
>> >>>
>> >>>
>> >>>
>> >
>> >
>>

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