2015-02-04 5 views
0

Предположим, я хочу, чтобы создать таблицу в SQL Server 2008 R2 следующим образом (это, вероятно, неправильно, но это помогает проиллюстрировать точку):Как увеличить столбец идентичности в паре с другим столбцом?

CREATE TABLE BANK_ACCOUNT 
     (
      BankID INT NOT NULL, 
      RecID INT IDENTITY(1,1) NOT NULL, 
      IDValue varchar(100) NOT NULL, 
     ) ON [PRIMARY] 
GO 

ALTER TABLE BANK_ACCOUNT 
    ADD CONSTRAINT 
       PK_BANK_ACCOUNT PRIMARY KEY CLUSTERED 
       (
       BankID, 
       RecID 
       ) ON [PRIMARY] 

GO Как я могу сделать так, чтобы каждый раз, когда я вставить запишите в таблицу, чтобы идентификатор запроса был соответствующим образом увеличен с помощью BankID. Так, например:

INSERT (BankID, IDValue) INTO BANK_ACCOUNT VALUES (1, "Val1") 
INSERT (BankID, IDValue) INTO BANK_ACCOUNT VALUES (1, "Val2") 
INSERT (BankID, IDValue) INTO BANK_ACCOUNT VALUES (2, "Val3") 
INSERT (BankID, IDValue) INTO BANK_ACCOUNT VALUES (1, "Val4") 

должны производить:

BankID | RecID | IDValue 
    1  1  Val1 
    1  2  Val2 
    2  1  Val3 
    1  3  Val4 
+0

Вы не можете DIO, что с единицей. – HLGEM

ответ

1

вместо создания View

CREATE TABLE BANK_ACCOUNT 
    (
    Iden_Col INT IDENTITY(1, 1) NOT NULL, 
    BankID INT NOT NULL, 
    IDValue VARCHAR(100) NOT NULL, 
) 

GO 

INSERT INTO BANK_ACCOUNT 
VALUES  (1,'Val1') 

INSERT INTO BANK_ACCOUNT 
VALUES  (1,'Val2') 

INSERT INTO BANK_ACCOUNT 
VALUES  (2,'Val3') 

INSERT INTO BANK_ACCOUNT 
VALUES  (1,'Val4') 

go 

CREATE VIEW BANK_ACCOUNT_View 
AS 
    SELECT Row_number() 
      OVER(
       partition BY BankID 
       ORDER BY Iden_Col) RecID, 
      BankID, 
      IDValue 
    FROM BANK_ACCOUNT 

select * FROM BANK_ACCOUNT_View