Esto me parece ser el tipo de problema que surgiría todo el tiempo con el desarrollo de SQL/base de datos, pero luego soy nuevo en todo esto, así que perdona mi ignorancia.Insertar SQL en tablas relacionadas
Tengo 2 tablas:
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
y
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]
quiero insertar una nueva entrada en la tabla de pistas. Esto también implicará insertar una nueva entrada en la tabla trackstrings y asegurarse de que la columna de clave foránea tracktringid en pistas apunta a la nueva entrada en trackssings. ¿Cuál es el medio más eficiente para lograr esto?
@@ IDENTIDAD no es la mejor manera de hacerlo. SCOPE_IDENTITY() es mucho más seguro. Si hay un desencadenador que funciona un poco cuando se inserta en cadenas de pistas y se inserta en una tabla con una identidad, obtendrá la identidad del desencadenante y no de la tabla original. –
Genial, gracias por la información. No me di cuenta de la diferencia. – palehorse
Lea esto para saber por qué @@ Identity no debe utilizarse en este caso: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve- last-inserted-identity-of-record / – hidden