按顺序插入SQL

按顺序插入SQL,sql,sql-server,Sql,Sql Server,我有一个SQL表,其中有一列名为信用卡代码 数据例 CCARD-000093 CCARD-000094 CCARD-000095 CCARD-000096 CCARD-000097 CCARD-000098 CCARD-000099 CCARD-000100 CCARD-000101 将数据插入此表时,如何获取序列中的下一个值 这就是我目前所拥有的 SELECT 'CCARD-' + (SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7,

我有一个SQL表,其中有一列名为
信用卡代码

数据例

CCARD-000093
CCARD-000094
CCARD-000095
CCARD-000096
CCARD-000097
CCARD-000098
CCARD-000099
CCARD-000100
CCARD-000101
将数据插入此表时,如何获取序列中的下一个值

这就是我目前所拥有的

SELECT 'CCARD-' + 
(SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) AS 
NVARCHAR(MAX)) FROM CustomerCreditCard ccc)
这就产生了CCARD-101


如何使其返回
CCARD-000101

如果要在插入记录时增加表,可以使用Identity和Presisted概念自动增加

IF OBJECT_ID('TestTables', 'U') IS NOT NULL 
BEGIN
    DROP TABLE TestTables 
END
从要开始的位置重置标识

DBCC checkident ('TestTables', reseed, 93)

CREATE TABLE TestTables
(
    CreditCard AS ('CCARD-0000' + CAST(AutoIncId as varchar)) PERSISTED NOT NULL PRIMARY KEY,    
    [AutoIncId] INT IDENTITY NOT NULL,
    [Bank] VARCHAR(10)
);


INSERT INTO TestTables ([Bank]) VALUES ('Indus')
INSERT INTO TestTables ([Bank]) VALUES ('ICICI')
INSERT INTO TestTables ([Bank]) VALUES ('HDFC')
INSERT INTO TestTables ([Bank]) VALUES ('DBS')

SELECT * FROM TestTables

如果要在插入记录时增加表,可以使用Identity和Presisted概念自动增加

IF OBJECT_ID('TestTables', 'U') IS NOT NULL 
BEGIN
    DROP TABLE TestTables 
END
从要开始的位置重置标识

DBCC checkident ('TestTables', reseed, 93)

CREATE TABLE TestTables
(
    CreditCard AS ('CCARD-0000' + CAST(AutoIncId as varchar)) PERSISTED NOT NULL PRIMARY KEY,    
    [AutoIncId] INT IDENTITY NOT NULL,
    [Bank] VARCHAR(10)
);


INSERT INTO TestTables ([Bank]) VALUES ('Indus')
INSERT INTO TestTables ([Bank]) VALUES ('ICICI')
INSERT INTO TestTables ([Bank]) VALUES ('HDFC')
INSERT INTO TestTables ([Bank]) VALUES ('DBS')

SELECT * FROM TestTables

下一个值,固定长度,前导为“0”:

SELECT 'CCARD-' + RIGHT(REPLICATE('0',6)+CAST(1+MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) AS NVARCHAR(6)),6) 
FROM CustomerCreditCard ccc

下一个值,固定长度,前导为“0”:

SELECT 'CCARD-' + RIGHT(REPLICATE('0',6)+CAST(1+MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) AS NVARCHAR(6)),6) 
FROM CustomerCreditCard ccc

这似乎奏效了

INSERT INTO CustomerCreditCard (CustomerCode, CreditCardCode, CreditCardDescription, NameOnCard, Address, City, State, PostalCode, Country, ExpMonth, ExpYear, Telephone, Email, IsActive,  ResidenceType, UserCreated, DateCreated, UserModified, DateModified, County, StartMonth, StartYear)
  SELECT c.CustomerCode, 
    (SELECT 'CCARD-' + REPLICATE('0', 6 - LEN((SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) + 1 AS NVARCHAR(MAX)) FROM CustomerCreditCard ccc))) +
(SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) + 1 AS NVARCHAR(MAX)) FROM CustomerCreditCard ccc)), 
    'Web Credit Card',
    c.CustomerName, 
    c.Address, 
    c.City, 
    c.State, 
    c.PostalCode, 
    c.Country, 
    'Jan', 
    2025, 
    c.Telephone, 
    c.Email, 
    1, 
    c.ResidenceType, 
    'webadmin', 
    GETDATE(), 
    'webadmin', 
    GETDATE(), 
    c.County, 
    'Jan',
    2010
    FROM Customer c
  WHERE c.CustomerCode = 'CUST-015056'

这似乎奏效了

INSERT INTO CustomerCreditCard (CustomerCode, CreditCardCode, CreditCardDescription, NameOnCard, Address, City, State, PostalCode, Country, ExpMonth, ExpYear, Telephone, Email, IsActive,  ResidenceType, UserCreated, DateCreated, UserModified, DateModified, County, StartMonth, StartYear)
  SELECT c.CustomerCode, 
    (SELECT 'CCARD-' + REPLICATE('0', 6 - LEN((SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) + 1 AS NVARCHAR(MAX)) FROM CustomerCreditCard ccc))) +
(SELECT CAST(MAX(CAST(SUBSTRING(ccc.CreditCardCode,7, 6) as INT)) + 1 AS NVARCHAR(MAX)) FROM CustomerCreditCard ccc)), 
    'Web Credit Card',
    c.CustomerName, 
    c.Address, 
    c.City, 
    c.State, 
    c.PostalCode, 
    c.Country, 
    'Jan', 
    2025, 
    c.Telephone, 
    c.Email, 
    1, 
    c.ResidenceType, 
    'webadmin', 
    GETDATE(), 
    'webadmin', 
    GETDATE(), 
    c.County, 
    'Jan',
    2010
    FROM Customer c
  WHERE c.CustomerCode = 'CUST-015056'

请共享序列代码和
next value for
返回的内容。我无法正确获取
next value for
的语法,因此无法使其返回值。您最好对此数据使用计算列,只需使用常规int标识即可。这样,您就不必担心下一个值的计算。请共享序列代码和
返回的下一个值。我无法正确获取
下一个值的语法,因此我无法让它返回值。您最好对此数据使用计算列,只需使用常规的int标识即可。这样你就不用担心计算下一个值了。你能在我的问题中解释一下你的答案吗?如果我要在列
CreditCardCode
中插入,我将如何增加该值,基于当前最高值?如果数据直接插入表中,则您可以按照此过程进行操作如果您想插入最大值,则需要通过MAX select@BrendanGooden我将发布您可以在我的问题中解释您的答案吗?如果我要插入到列
CreditCardCode
中,如何根据当前最高值增加该值?如果数据直接插入到表中,则您可以遵循此过程如果您要插入最大值,则需要通过MAX select@BrendanGooden我将发布给您