Questo mi sembra il tipo di problema che si svilupperebbe continuamente con lo sviluppo di SQL/database, ma poi sono nuovo a tutto questo, quindi perdona la mia ignoranza.Inserimento SQL in tabelle correlate
Ho 2 tabelle:
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
e
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]
voglio inserire una nuova voce nella tabella tracce. Ciò comporterà anche l'inserimento di una nuova voce nella tabella trackstrings e assicurando che la colonna chiave esterna trackstringid nelle tracce punti alla nuova voce in trackstrings. Qual è il mezzo più efficace per raggiungere questo obiettivo?
@@ IDENTITY non è il modo migliore per farlo. SCOPE_IDENTITY() è molto più sicuro. Se c'è un trigger che funziona quando si inserisce in trackstrings e si inserisce in una tabella con un'identità, si otterrà l'identità dal trigger e non dalla tabella originale. –
Fantastico, grazie per le informazioni. Non ho capito la differenza. – palehorse
Leggere per sapere perché @@ Identity non deve essere utilizzato in questo caso: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve- ultimo inserito identità di record / – hidden