Хранимая процедура не увеличивается с шагом более 10 - PullRequest
1 голос
/ 05 июля 2019

Создайте следующую хранимую процедуру, но @tagID не увеличивается для более чем 10 последовательных из 1 - пожалуйста, помогите.

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 ]

4 голосов
/ 05 июля 2019

EmpId - это nvarchar, поэтому, когда его значение достигает 10, максимальное значение остается равным 9, поскольку при сравнении символов 9 больше 10, поэтому вы будете продолжать получать 9 + 1 в качестве следующего значения.

Также у вас уже есть столбец идентификатора сотрудника в таблице с автоматически увеличивающимися значениями, поэтому я не думаю, что столбец EmpId необходим.

0 голосов
/ 05 июля 2019

Концепция получила ответ, однако я добавляю условие "безопасность" в предложение where. (таким образом, мой новый ответ)

Общий пример 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...