In SQL Server, eine einfache INSERT tun:
create table dbo.Foo
(
ID int primary key identity,
ParentID int not null foreign key references foo(ID)
)
go
insert dbo.Foo (parentId) values (1)
select * from dbo.Foo
Ergebnisse in
ID ParentID
----------- -----------
1 1
Wenn Sie einen Wert einzufügen sind versucht, die aus Ihrer Identität Samen anders sein wird, das Einfügen wird versagen.
UPDATE:
Die Frage ist nicht ganz klar, was der Kontext (dh der Code sollte in einem Live-Produktionssystem arbeiten oder einen DB-Setup-Skript nur) und aus den Kommentaren scheint es hart codierte Die ID ist möglicherweise keine Option. Der obige Code sollte normalerweise in den DB-Initialisierungsskripten funktionieren, in denen die Hierarchie-Stamm-ID bekannt und konstant sein muss. Im Fall einer Gesamtstruktur (mehrere Stämme mit IDs, die nicht im Voraus bekannt sind) sollte das Folgende wie vorgesehen funktionieren:
Dann könnte man die letzte Identität wie üblich abfragen (SCOPE_IDENTITY
, etc.). Um Adresse @ usr Bedenken, ist der Code in der Tat transaktions sicher wie das folgende Beispiel zeigt:
insert dbo.Foo (parentId) values (IDENT_CURRENT('dbo.Foo'))
insert dbo.Foo (parentId) values (IDENT_CURRENT('dbo.Foo'))
insert dbo.Foo (parentId) values (IDENT_CURRENT('dbo.Foo'))
select * from dbo.Foo
select IDENT_CURRENT('dbo.Foo')
begin transaction
insert dbo.Foo (parentId) values (IDENT_CURRENT('dbo.Foo'))
rollback
select IDENT_CURRENT('dbo.Foo')
insert dbo.Foo (parentId) values (IDENT_CURRENT('dbo.Foo'))
select * from dbo.Foo
Das Ergebnis:
ID ParentID
----------- -----------
1 1
2 2
3 3
currentIdentity
---------------------------------------
3
currentIdentity
---------------------------------------
4
ID ParentID
----------- -----------
1 1
2 2
3 3
5 5
Intersting Frage. Ist es überhaupt möglich, auf dich selbst zu verweisen? Wie können Sie sogar 1 Datensätze erstellen, wenn sie neu erstellt werden? – YvesR
Welche Zeile ist die übergeordnete Zeile Ihrer ersten Zeile? –
Für die erste Zeile sollte ParentID ID sein. Wenn ich mehrere Wurzeln in meiner Baumstruktur verwenden möchte, hat jeder Stamm ParentID == ID. Daher kann die Frage wie erweitert werden - wie kann ich Stammzeilen einfügen?Kann die gespeicherte Prozedur SCOPE_IDENTITY verwenden, um diese Einfügung vorzunehmen? – Nezreli