SQL إدراجها في الجداول المرتبطة
-
11-07-2019 - |
سؤال
وهذا يبدو لي أن هذا النوع من مسألة من شأنها أن تنشأ في كل وقت مع تطوير SQL / قاعدة البيانات، ولكن بعد ذلك أنا جديدة إلى كل هذا، فاغفر جهلي.
ولقد 2 الجداول:
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
و
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]
وأريد أن إدراج إدخال جديد في الجدول المسارات. وهذا أيضا تنطوي على إدراج إدخال جديد في الجدول trackstrings، والتأكد من أن الأجانب trackstringid عمود المفتاح في نقاط مسارات لإدخال جديد في trackstrings. ما هي الوسيلة الأكثر فعالية لتحقيق ذلك؟
المحلول
أولا، تضاف إلى TrackStrings
، وحذف عمود المفتاح الأساسي من القائمة العمود. هذا استدعاء العمود IDENTITY
والتي تولد قيمة تلقائيا.
INSERT INTO [dbo].[TrackStrings] ([String])
VALUES ('some string');
والثانية، تضاف إلى Tracks
وتعيين مثل TrackStringId
لها وظيفة <لأ href = "http://msdn.microsoft.com/en-us/library/ms190315(SQL.90).aspx" يختلط = "noreferrer" > SCOPE_IDENTITY()
، والتي ترجع قيمة أحدث الناتجة عن عمود IDENTITY
في النطاق الحالي الخاص بك م>.
INSERT INTO [dbo].[Tracks] ([TrackStringId], [Time])
VALUES (SCOPE_IDENTITY(), CURRENT_TIMESTAMP());
نصائح أخرى
إذا كنت تستخدم SQL Server 2005 أو في وقت لاحق، وإدخال الكثير من السجلات في INSERT
واحد، ويمكن أن ننظر إلى OUTPUT
أو OUTPUT INTO
الخيارات <لأ href = "http://msdn.microsoft.com/en-us /library/ms177564.aspx "يختلط =" noreferrer "> هنا استخدام هويات من إدراج الأول في المجموعة الثانية دون معايا إلى" إعادة إيجاد "الصفوف للحصول على كل القيم IDENTITY
.
وإدراج الأولى في الجدول الأساسي.
INSERT INTO trackstrings VALUES('myvalue')
التالي الحصول على الهوية. يعتمد هذا الأسلوب على ما إذا كنت تفعل كل شيء في البيان 1 أو إجراء مخزن أو بعض الطرق الأخرى. أنا سأفترض 1 بيان ولذا فإنني سوف تضاف فقط مع متغير خاص الهوية.
INSERT INTO tracks VALUES( @@IDENTITY, getdate() )
وشيء من هذا القبيل ينبغي أن نفعل ذلك اعتمادا على السيناريو بالضبط. والمفتاح هومتغير الهوية. انها تحمل قيمة الهوية إدراج الأخيرة من أجل الاتصال الذي تستخدمه. وليس من جدول معين، بل هو مجرد هوية أحدث إدراجها خلال عمر الاتصالات.