SQL insert in verknüpften Tabellen
Dies scheint mir die Art von Problem würde auftauchen die ganze Zeit mit SQL/Datenbank-Entwicklung, aber ich bin neu, um all dies, so verzeihen Sie meine Unwissenheit.
Ich habe 2 Tabellen:
CREATE TABLE [dbo].[Tracks](
[TrackStringId] [bigint] NOT NULL,
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Time] [datetime] NOT NULL,
CONSTRAINT [PK_Tracks] PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_AudioStreams]
GO
ALTER TABLE [dbo].[Tracks] WITH CHECK ADD CONSTRAINT
[FK_Tracks_TrackStrings] FOREIGN KEY([TrackStringId])
REFERENCES [dbo].[TrackStrings] ([Id])
GO
ALTER TABLE [dbo].[Tracks] CHECK CONSTRAINT [FK_Tracks_TrackStrings]
GO
und
CREATE TABLE [dbo].[TrackStrings](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[String] [nvarchar](512) NOT NULL,
CONSTRAINT [PK_Strings] PRIMARY KEY CLUSTERED
(
[Id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Möchte ich so fügen Sie einen neuen Eintrag in die tracks Tisch. Damit verbunden ist auch das einfügen eines neuen Eintrags in der trackstrings Tisch, und sicherzustellen, dass die foreign-key-Spalte trackstringid in Spuren Punkte, um den neuen Eintrag in trackstrings. Was ist das effizienteste Mittel, dies zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, legen Sie in
TrackStrings
, weglassen der primary key-Spalte aus der Spaltenliste. Dieser ruft seineIDENTITY
Spalte, die einen Wert erzeugt automatisch.Zweiten, legen Sie in
Tracks
und geben Sie als IhreTrackStringId
die FunktionSCOPE_IDENTITY()
, die gibt den letzten generierten Wert durch eineIDENTITY
Spalte in Ihrem aktuellen Umfang.Wenn Sie SQL Server 2005 oder höher, sowie das einfügen einer Menge von Datensätzen in einer einzigen
INSERT
können Sie sich inOUTPUT
oderOUTPUT INTO
Optionen hier zu verwenden, die Identitäten aus der ersten einsetzen in die zweite, ohne haveing auf "erneut suchen" - die Zeilen aus, um alleIDENTITY
Werte.Ersten insert in die erste Tabelle.
Weiter, um die Identität. Diese Methode davon abhängig, ob Sie es tun alle in 1-Anweisung oder eine gespeicherte Prozedur oder eine andere Methode. Ich gehe davon aus 1-Anweisung, so werde ich legen Sie einfach mit der Identität spezielle variable.
Etwas mag, der sollte es tun, abhängig von Ihrem genauen Szenario. Der Schlüssel ist der @@IDENTITY-variable. Es hält den zuletzt eingefügten identity-Wert für die Verbindung, die Sie verwenden. Es ist nicht table-spezifisch, es ist einfach die aktuellste Identität eingefügt, während die verbindungen Lebensdauer.