سؤال

وهذا يبدو لي أن هذا النوع من مسألة من شأنها أن تنشأ في كل وقت مع تطوير 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() )

وشيء من هذا القبيل ينبغي أن نفعل ذلك اعتمادا على السيناريو بالضبط. والمفتاح هومتغير الهوية. انها تحمل قيمة الهوية إدراج الأخيرة من أجل الاتصال الذي تستخدمه. وليس من جدول معين، بل هو مجرد هوية أحدث إدراجها خلال عمر الاتصالات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top