IDENTITY COLUMN - HUECOS - IDENTITY GAPS
Publicado por Edgar (13 intervenciones) el 10/09/2007 17:31:00
de ante mano, muchas gracias por al menos leer esto....
bueno, tengo varias tablas en sql server 2005 en las cuales las llaves primaria de cada una de estas trabajan con identity column, es decir, queel codigo se auto incrementa. Yo manejo el error de la siguiente forma:
IF OBJECT_ID ( 'dbo.GuardarMarca', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.GuardarMarca
GO
CREATE PROCEDURE dbo.GuardarMarca
@Nombre text
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO Marca
VALUES (@Nombre)
--COMMIT
END TRY
BEGIN CATCH
--If @@Transaction >0
ROLLBACK
DECLARE @ErrorSeverity INT, @ErrorNumber INT, @ErrorMessage NVARCHAR(4000), @ErrorState INT
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorMessage = ERROR_MESSAGE()
SET @ErrorState = ERROR_STATE()
RAISERROR ('ERROR OCCURED:%d', @ErrorSeverity, @ErrorState, @ErrorNumber, @ErrorMessage )
END CATCH
END
pues me funciona bn, el deatlle es que cuando pongo a prueba el proc, con un @nombre de longitud mucho mas larga que la soporta el campo en la tabla, me atrapa el error y no me crea ningun regiustro PERO ME AUMENTA EL CODIGO, si el ultimo era 1 y supuestamente iba a crear el 2, pero se produjo un error. al momento de crear uno y que no genera ningun error me lo almacena con el 3. NO SE que hacer intente con DBCC CHECKIDENT (Marca, RESEED, @UltimoCodigo), y @UltimoCodigo es el resultado de un selct coutn de la tabla y asi deberia funcioanr pero me dice que la funcion DBCC CHECKIDENT no acpeta por parametros una variable....NO SE QUE HACER. No se si me recomiendan trabjar los errores de otra forma o trabjar sin el identity column, y si es asi como se manejarian los errores de forma eficiente....
ESPERO ME AYUDEN GRACIAAAAAAASS!!!
bueno, tengo varias tablas en sql server 2005 en las cuales las llaves primaria de cada una de estas trabajan con identity column, es decir, queel codigo se auto incrementa. Yo manejo el error de la siguiente forma:
IF OBJECT_ID ( 'dbo.GuardarMarca', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.GuardarMarca
GO
CREATE PROCEDURE dbo.GuardarMarca
@Nombre text
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO Marca
VALUES (@Nombre)
--COMMIT
END TRY
BEGIN CATCH
--If @@Transaction >0
ROLLBACK
DECLARE @ErrorSeverity INT, @ErrorNumber INT, @ErrorMessage NVARCHAR(4000), @ErrorState INT
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorNumber = ERROR_NUMBER()
SET @ErrorMessage = ERROR_MESSAGE()
SET @ErrorState = ERROR_STATE()
RAISERROR ('ERROR OCCURED:%d', @ErrorSeverity, @ErrorState, @ErrorNumber, @ErrorMessage )
END CATCH
END
pues me funciona bn, el deatlle es que cuando pongo a prueba el proc, con un @nombre de longitud mucho mas larga que la soporta el campo en la tabla, me atrapa el error y no me crea ningun regiustro PERO ME AUMENTA EL CODIGO, si el ultimo era 1 y supuestamente iba a crear el 2, pero se produjo un error. al momento de crear uno y que no genera ningun error me lo almacena con el 3. NO SE que hacer intente con DBCC CHECKIDENT (Marca, RESEED, @UltimoCodigo), y @UltimoCodigo es el resultado de un selct coutn de la tabla y asi deberia funcioanr pero me dice que la funcion DBCC CHECKIDENT no acpeta por parametros una variable....NO SE QUE HACER. No se si me recomiendan trabjar los errores de otra forma o trabjar sin el identity column, y si es asi como se manejarian los errores de forma eficiente....
ESPERO ME AYUDEN GRACIAAAAAAASS!!!
Valora esta pregunta


0