存储过程的增量不超过10

时间:2019-07-05 17:00:39

标签: sql sql-server

创建以下存储过程,但是@tagID的序列号从1开始的增加不超过10-请提供帮助。

CREATE PROCEDURE [dbo].[bulk_employee]
    @active BIT,
    @FNAME NVARCHAR(50),     
    @DOB DATE,  
    @DOJ DATE,  
    @GENDER NVARCHAR(10), 
    @FATHER_NAME NVARCHAR(50) = NULL,  
    @AADHAR NVARCHAR(14),   
    @ESIC NVARCHAR(10) = NULL,  
    @UAN NVARCHAR(10) = NULL,
    @SALARY INT,    
    @BRANCH INT,     
    @DIVISION INT,  
    @USER INT
AS 
BEGIN
    DECLARE @TagID INT;

    SELECT @TagID = COALESCE((SELECT MAX(Emp_ID) + 1 FROM EmployeeP1), 1)

    INSERT INTO EmployeeP1 (isActive, Emp_ID, FirstName, BirthDate, JoiningDate, Gender, FatherName, aadharnumber, ESIC, UAN, SalaryID, DivisionID, BranchID, AccessBy, LastUsed)
    VALUES ('0', @TagID, @FNAME, @DOB, @DOJ, @GENDER, @FATHER_NAME, @AADHAR, @ESIC, @UAN, @SALARY, @DIVISION, @BRANCH, @USER, CURRENT_TIMESTAMP)
END

EmployeeP1结构

CREATE TABLE [dbo].[EmployeeP1]
(
    [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
    [Emp_ID] [nvarchar](10) NULL,
    [isActive] [bit] NULL,
    [FirstName] [nvarchar](50) NOT NULL,
    [LastName] [nvarchar](50) NULL,
    [BirthDate] [date] NOT NULL,
    [Gender] [nvarchar](10) NOT NULL,
    [FatherName] [nvarchar](50) NOT NULL,
    [MotherName] [nvarchar](50) NULL,
    [Address1] [nvarchar](50) NULL,
    [Address2] [nvarchar](50) NULL,
    [Address3] [nvarchar](50) NULL,
    [Pin_Code] [numeric](6, 0) NULL,
    [DistrictID] [int] NULL,
    [StateID] [int] NULL,
    [Mobile] [nvarchar](10) NULL,
    [Mobile2] [nvarchar](10) NULL,
    [Email] [nvarchar](50) NULL,
    [AccountName] [nvarchar](50) NULL,
    [BankAccount] [nvarchar](30) NULL,
    [IfscCode] [nvarchar](11) NULL,
    [PermanentAccount] [nvarchar](10) NULL,
    [AadharNumber] [nvarchar](14) NULL,
    [JoiningDate] [date] NOT NULL,
    [ESIC] [nchar](12) NULL,
    [Esic_Joining_Date] [date] NULL,
    [UAN] [nchar](12) NULL,
    [UAN_Joining_Date] [date] NULL,
    [EPF_ID] [nvarchar](10) NULL,
    [SalaryID] [int] NOT NULL,
    [DivisionID] [int] NOT NULL,
    [BranchID] [int] NOT NULL,
    [AccessBy] [int] NOT NULL,
    [LastUsed] [datetime] NULL,

    PRIMARY KEY CLUSTERED ( [EmployeeID] ASC)
) ON [PRIMARY]

与批量插入相同的输入如下:

With Bulk Insert the auto increment is not updating after 10 serials

期望所有通过批量导入插入的记录的序列增量

2 个答案:

答案 0 :(得分:4)

EmpId是nvarchar,因此当其值达到10时,最大值仍为9,因为在字符比较中9大于10,因此您将继续获得9 +1作为下一个值。

另外,您表中已经有带有自动递增值的Employee ID列,因此我认为EmpId列不是必需的。

答案 1 :(得分:0)

已经回答了这个概念,但是我在where子句中添加了“安全”条件。 (因此是我的新答案)

该列为字符串列BUT的通用Northwind示例具有int值。

  SELECT MAX(CAST(PostalCode as INT)) + 1 as NextValue FROM dbo.Customers 
    WHERE 
        ISNUMERIC(PostalCode) > 0 /* protect against non int values in a string column */

可能是您的查询

  SELECT MAX(CAST(Emp_Id as INT)) + 1 as NextValue FROM dbo.EmployeeP1 
    WHERE 
        ISNUMERIC(Emp_Id) > 0 /* protect against non int values in a string