HiI'm going round in circles here! I have a table where the PK is an IDENTITY column. I then have an SP that inserts a record into the table, and returns the PK as an output parameterThings seem to work okay for starters, then all of a sudden I start getting duplicate PK errors, even though the DBCC CHECKIDENT is showing the correct values.Violation of PRIMARY KEY constraint 'PK_uv_val_out'. Cannot insert duplicate key in object 'uv_val_out'.
Can anyone see what is wrong? To replicate it I do the following:Run the stored proc quite a few times using QA.Then SELECT * FROM uv_val_out just to check it all.Then run the stored proc again... and the error crops up.Table:CREATE TABLE dbo.uv_val_out( PK_uv_val_out_ID int NOT NULL IDENTITY(1,1), uv_server sysname NOT NULL DEFAULT @@SERVERNAME, uv_comp char(3) NULL, uv_userid varchar(10) NOT NULL, uv_datetime datetime NOT NULL DEFAULT GETDATE(), uv_till char(3) NULL, uv_trad varchar(8) NULL, uv_serv varchar(8) NULL, uv_cardid varchar(25) NULL, uv_cardbal decimal(10,2) NOT NULL DEFAULT 0, uv_tok1 decimal(8,2) NOT NULL DEFAULT 0, uv_tok2 decimal(8,2) NOT NULL DEFAULT 0, uv_tok3 decimal(8,2) NOT NULL DEFAULT 0, uv_tok4 decimal(8,2) NOT NULL DEFAULT 0, uv_dayly decimal(8,2) NOT NULL DEFAULT 0, uv_weekly decimal(8,2) NOT NULL DEFAULT 0, uv_mhtok decimal(8,2) NOT NULL DEFAULT 0, uv_lstrev decimal(8,2) NOT NULL DEFAULT 0, uv_loyalty int NOT NULL DEFAULT 0, uv_klix decimal(10,2) NOT NULL DEFAULT 0, uv_meal varchar(6) NULL, uv_meals int NOT NULL DEFAULT 0, uv_meale int NOT NULL DEFAULT 0, uv_wktok decimal(7,2) NOT NULL DEFAULT 0, uv_sent datetime NULL)ALTER TABLE dbo.uv_val_out ADD CONSTRAINT PK_uv_val_out PRIMARY KEY CLUSTERED (PK_uv_val_out_ID) WITH FILLFACTOR = 80
Then the stored proc:CREATE PROCEDURE dbo.Globalsp_UV_VAL_OUT_Insert( @TMPUserID varchar(10) = NULL, @PK_uv_val_out_ID int = NULL OUTPUT, @uv_server sysname = NULL, @uv_comp char(3) = NULL, @uv_userid varchar(10) = NULL, @uv_datetime datetime = NULL, @uv_till char(3) = NULL, @uv_trad varchar(8) = NULL, @uv_serv varchar(8) = NULL, @uv_cardid varchar(25) = NULL, @uv_cardbal decimal(10, 2) = NULL, @uv_tok1 decimal(8, 2) = NULL, @uv_tok2 decimal(8, 2) = NULL, @uv_tok3 decimal(8, 2) = NULL, @uv_tok4 decimal(8, 2) = NULL, @uv_dayly decimal(8, 2) = NULL, @uv_weekly decimal(8, 2) = NULL, @uv_mhtok decimal(8, 2) = NULL, @uv_lstrev decimal(8, 2) = NULL, @uv_loyalty int = NULL, @uv_klix decimal(10, 2) = NULL, @uv_meal varchar(6) = NULL, @uv_meals int = NULL, @uv_meale int = NULL, @uv_wktok decimal(7, 2) = NULL, @uv_sent datetime = NULL)AS SET NOCOUNT ON DECLARE @LastError int INSERT INTO dbo.uv_val_out ( uv_server, uv_comp, uv_userid, uv_datetime, uv_till, uv_trad, uv_serv, uv_cardid, uv_cardbal, uv_tok1, uv_tok2, uv_tok3, uv_tok4, uv_dayly, uv_weekly, uv_mhtok, uv_lstrev, uv_loyalty, uv_klix, uv_meal, uv_meals, uv_meale, uv_wktok, uv_sent ) VALUES ( COALESCE(@uv_server, @@servername), @uv_comp, @uv_userid, COALESCE(@uv_datetime, getdate()), @uv_till, @uv_trad, @uv_serv, @uv_cardid, COALESCE(@uv_cardbal, 0), COALESCE(@uv_tok1, 0), COALESCE(@uv_tok2, 0), COALESCE(@uv_tok3, 0), COALESCE(@uv_tok4, 0), COALESCE(@uv_dayly, 0), COALESCE(@uv_weekly, 0), COALESCE(@uv_mhtok, 0), COALESCE(@uv_lstrev, 0), COALESCE(@uv_loyalty, 0), COALESCE(@uv_klix, 0), @uv_meal, COALESCE(@uv_meals, 0), COALESCE(@uv_meale, 0), COALESCE(@uv_wktok, 0), @uv_sent ) SET @LastError = @@ERROR IF @LastError = 0 SET @PK_uv_val_out_ID = SCOPE_IDENTITY() ELSE SET @PK_uv_val_out_ID = 0 RETURN @LastErrorGO
And finally the code to run the stored proc:DECLARE @RC intDECLARE @PK_uv_val_out_ID intDECLARE @uv_comp char(3)DECLARE @uv_userid varchar(10)DECLARE @uv_datetime datetimeDECLARE @uv_cardbal decimal(10,2)SET @uv_comp = '001'SET @uv_userid = '61034'SET @uv_datetime = GETDATE()SET @uv_cardbal = -12.34EXEC @RC = dbo.Globalsp_UV_VAL_OUT_Insert @PK_uv_val_out_ID = @PK_uv_val_out_ID OUTPUT, @uv_comp = @uv_comp, @uv_userid = @uv_userid, @uv_datetime = @uv_datetime, @uv_cardbal = @uv_cardbalPRINT @PK_uv_val_out_id
I can't see where I'm going wrong - please help! I should mention that I'm using MSDE 2000 SP3a