创建以下存储过程,但是@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]
与批量插入相同的输入如下:
期望所有通过批量导入插入的记录的序列增量
答案 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