2016-07-06 13 views
0

にSQLに挿入例えば私は<code>Credit Card Code</code></p> <p>データと呼ばれる列を持つ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-000101を返すために取得できますかCCARD-101

を与えます?

+0

「次の値が返すもの」とシーケンスコードを共有してください。 – artm

+0

'NEXT VALUE FOR'の構文を正しく取得できませんでしたので、値を返すことができませんでした。 –

+0

このデータには計算された列を使用することをお勧めします。この方法では、次の値の計算について心配する必要はありません。 –

答えて

1

レコードを挿入しながら、テーブルをインクリメントしたい場合は、アイデンティティと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' 
関連する問題