2015-02-24 5 views
5

Ich habe eine Artikelthistorietabelle erstellt, für die ich automatisch VersionId partitioniert durch .Können Sie eine Untersequenz für eine Tabelle angeben?

ID  ItemId  VersionId  ItemContent  Created 
1   1    1    fooo    2015-02-24 12:54:00.11 
2   2    1    barr    2015-02-24 12:54:15.35 
3   1    2    foo    2015-02-24 12:55:00.61 
4   1    3    baz    2015-02-24 12:55:45.23 
5   2    2    bar    2015-02-24 12:56:00.03

Derzeit ist VersionId in einem Trigger festgelegt. Was ich möchte, ist so etwas finden (ich weiß, das ist nicht wirklich funktioniert):

create table ItemHistory 
(
    Id int identity(1,1) not null primary key 
    ,ItemId int not null references Item(Id) 
    ,VersionId int not null default row_number() over (partition by ItemId order by Id) 
    ,ItemContent varchar(max) 
    ,Created datetime not null default getdate() 
)

Während ich eine funktionierende Lösung haben, würde ich gerne wissen, ob ich einige gebaut bin fehlt -in Funktionalität für die Handhabung dieses Falls.

+0

Also sagen Sie, wenn Sie eine Zeile in die Tabelle schreiben, geben Sie die ItemId an und möchten, dass die VersionId basierend auf den bereits in der Tabelle vorhandenen Zeilen automatisch gesetzt wird? – Elliveny

+0

@Elliveny Ja, das stimmt. –

+0

Ich denke, ein Trigger ist die Antwort hier. Mir ist keine bessere Lösung bekannt. Upvote zu der Frage, ich bin gespannt, ob jemand mit etwas kommt! – Elliveny

Antwort

2

Falls Sie meinen Kommentar als Antwort verwenden

Warum mit Blick tut es einfach nicht? Sie können row_number() in einer Ansicht haben.

Mit einem Index auf ItemId, ID sollte es sehr schnell sein.
Wahrscheinlich weniger Overhead als Trigger.

Ich sehe, dass Sie einen Kommentar nur gelesen haben. Noch mehr Grund zum Ansehen.

+0

Während sicherlich besser als der Auslöser, ich glaube, ich hatte gehofft, dass einige neue fangled hotness, d. H .: eine partitionierte sequenez als eine Standardbedingung. – canon

+1

Eine FK-ID, die für jede FK-Sequenz sequenziert, wäre süß. – Paparazzi

+0

Ich stimme zu .. New-Fangled Schärfe könnte erforderlich sein. Partitionierte Sequenzen klingen erstaunlich. – whardier

Verwandte Themen