1
我已經實現了一個過程,我爲每個記錄插入傳遞了用戶自制的唯一ID。但問題是,同時出現多個匹配時,將唯一標識分配給所有用戶。使用存儲過程插入到SQL Server表中的重複記錄
我的程序代碼是
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[name]
(
[email protected]_id int,
@name nvarchar(50),
@designation int,
@deptmntid int,
[email protected] int,
@disid int,
@bentype_id int,
@benificry_type nvarchar(50),
@dob datetime,
@basic_pay int,
@home_address nvarchar(200),
@mobile nvarchar(50),
@email nvarchar(50),
@aadhar nvarchar(50),
@applicant_image image,
@ip nvarchar(50),
@udate datetime,
@ddoid int,
@depend_id int,
@relation int,
@flag int,
@officename nvarchar(max),
@deptother nvarchar(max),
@desigother nvarchar(max),
@regno bigint output,
@flg int output)
AS
SET NOCOUNT ON;
DECLARE @regnc char(6);
DECLARE @numm varchar(7);
DECLARE @regnc_dcd varchar(11);
DECLARE @final_appno varchar(11);
DECLARE @bentype int;
DECLARE @ddotocode int;
DECLARE @ddochk int;
DECLARE @regidchk bigint;
BEGIN TRANSACTION
SELECT @ddochk = ddoid
FROM tablename
WHERE ddoid = @ddoid;
IF (@ddochk IS NULL)
BEGIN
SET @numm = '1';
SET @regnc = STUFF(@numm, 1, 0, REPLICATE('0', 6 - LEN(@numm)));
SET @regnc_dcd = cast(@ddoid as varchar(4)) + cast(@bentype_id as varchar(1)) + cast(@regnc as varchar(6));
SET @final_appno = @regnc_dcd
END
ELSE
BEGIN
SELECT
@numm = MAX(ISNULL(auto_inc, 0) + 1),
@ddotocode = ddoid
FROM
tablename
WHERE
ddoid = @ddoid;
SET @regnc = STUFF(@numm, 1, 0, REPLICATE('0', 6 - LEN(@numm)));
SET @regnc_dcd=cast(@ddotocode as varchar(4)) + cast(@bentype_id as varchar(1)) + cast(@regnc as varchar(6));
SET @final_appno = @regnc_dcd
END
BEGIN
INSERT INTO tablename (reg_id, auto_inc, name, desigid, deptid, distid, bentype_id, benificry_type, dob, basic_pay, home_address, mobile, email, aadhar, ip, udate, ddoid, applicant_image, flag, officename, deptother, desigother)
VALUES (@final_appno, @regnc, @name, @designation, @deptmntid, @disid, @bentype_id, @benificry_type, @dob, @basic_pay, @home_address, @mobile, @email, @aadhar, @ip, @udate, @ddoid, @applicant_image, @flag, @officename, @deptother, @desigother)
SET @regno = @final_appno;
END
IF @@ERROR <> 0
BEGIN
ROLLBACK
-- Raise an error and return
RAISERROR ('Error in Inserting record from temp.....', 16, 1)
RETURN
END
BEGIN
INSERT INTO SHCbeneficiary(card_id, depend_id, pic, name, dob, relation, ip, aadhar, udate)
VALUES (@final_appno, @depend_id, @applicant_image, @name, @dob, @relation, @ip, @aadhar, @udate)
IF @@ERROR <> 0
BEGIN
-- Rollback the transaction
ROLLBACK
-- Raise an error and return
RAISERROR ('Error in updating record in persoaldetails....!!!', 16, 1)
RETURN
END
SET @flg = 1;
END
COMMIT TRANSACTION
我要檢查重複的數據,直到一個唯一的ID沒有在表中找到。 這意味着我想在過程中使用遞歸。
此外,我已經使用了一個CTE,標量值函數的唯一性,但它運行不正常。請幫助
什麼版本的SQL服務器是這個嗎? – laylarenee
將在未來的SQL Server版本中刪除'image'數據類型。避免在新的開發工作中使用這種數據類型,並計劃修改當前使用它的應用程序。改用'varbinary(max)'。 [在此處查看詳細信息](http://msdn.microsoft.com/en-us/library/ms187993.aspx) –
爲什麼不只是使用IDENTITY列? – RBarryYoung