Cela me semble être le genre de problème qui surgirait tout le temps avec le développement SQL/base de données, mais alors je suis nouveau à tout cela, alors pardonnez mon ignorance.Insertion SQL dans des tables connexes
J'ai 2 tables:
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
et
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]
Je veux insérer une nouvelle entrée dans la table des pistes. Cela impliquera également d'insérer une nouvelle entrée dans la table trackstrings, et de s'assurer que la piste keystringid de la clé étrangère dans les pistes pointe vers la nouvelle entrée dans trackstrings. Quel est le moyen le plus efficace pour y parvenir?
@@ IDENTITY n'est pas le meilleur moyen de le faire. SCOPE_IDENTITY() est beaucoup plus sûr. S'il y a un déclencheur qui fonctionne un peu lors de l'insertion dans trackstrings et qu'il s'insère dans une table avec une identité, vous obtiendrez l'identité du trigger et non la table d'origine. –
Cool, merci pour l'info. Je n'ai pas réalisé la différence. – palehorse
Veuillez lire ceci pour savoir pourquoi @@ Identity ne doit pas être utilisé dans ce cas: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve- dernière-insérée-identité-d'enregistrement / – hidden