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