2016-07-06 51 views
0

我有一个表中的SQL与一个叫Credit Card Code插入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 ???

+0

请分享序列码和'下一个值'返回。 – artm

+0

我无法得到'NEXT VALUE FOR'的语法正确,所以我无法让它返回一个值。 –

+0

您最好对此数据使用计算列,并只使用常规的int标识。这样你就不必担心计算下一个值。 –

回答

1

,如果你想增加表时,你可以使用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

你能否在我的问题中解释你的答案?如果我要插入“CreditCardCode”列,我将如何根据最高当前值增加该值? –

+0

如果数据直接插入表中,那么你可以按照这个过程,如果你想插入最大值,那么你需要经过MAX选择@BrendanGooden我会发布你 – mohan111

+0

看到上面,你能适应我的代码? –

1

下一个值标识插入记录,固定长度,带前导'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

这似乎有伎俩

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'