تعيين إدراج استنادا إلى جدولين مع 1 إلى 0-1 العلاقة

StackOverflow https://stackoverflow.com/questions/1012468

سؤال

ولدي جدولين، الأول لديه المفتاح الأساسي الذي هو الهوية، والثاني لديه المفتاح الأساسي الذي هو لا، ولكن هذا المفتاح يحتوي على قيد المفتاح الخارجي إلى المفتاح الأساسي للجدول الأول.

إذا أنا إدخال سجل واحد في وقت واحد يمكنني استخدام SCOPE_IDENTITY للحصول على قيمة لكيه إدراجها فقط في الجدول (1) التي أريد أن أدخل في الجدول الثاني.

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

وبلدي الحل الحالي هو استخدام المؤشر، تدرج في الجدول الأول، والحصول على المفتاح باستخدام SCOPE_IDENTITY، تضاف إلى الجدول الثاني، وتكرار.

وأنا في عداد المفقودين حل غير المؤشر؟

هل كانت مفيدة؟

المحلول

نعم، ابحث عن شرط الانتاج في كتب عبر الإنترنت.

نصائح أخرى

وكان لي هذه المشكلة فقط هذا الاسبوع: شخص ما قد أدخلت جدول مع مفتاح بديل معنى في المخطط حيث طبيعي وتستخدم المفاتيح. لا شك سوف إصلاح هذا قريبا :) حتى ذلك الحين، وأنا أعمل من حوله عن طريق إنشاء جدول من البيانات لINSERT من: يمكن أن يكون هذا الجدول قاعدة دائمة أو مؤقتة أو جدول مشتقة (أنظر أدناه)، والتي ينبغي أن تتناسب لديك الرغبة في حل يستند إلى مجموعة على أية حال. استخدام صلة بين هذا الجدول والجدول مع العمود IDENTITY على مفتاح الطبيعي لمعرفة القيم الذي تم إنشاؤه تلقائيا. وهنا مثال مختصر:

CREATE TABLE Test1 
(
 surrogate_key INTEGER IDENTITY NOT NULL UNIQUE, 
 natural_key CHAR(10) NOT NULL CHECK (natural_key NOT LIKE '%[^0-9]%') UNIQUE
);

CREATE TABLE Test2
(
 surrogate_key INTEGER NOT NULL UNIQUE
    REFERENCES Test1 (surrogate_key), 
 data_col INTEGER NOT NULL
);

INSERT INTO Test1 (natural_key)
SELECT DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col);

INSERT INTO Test2 (surrogate_key, data_col)
SELECT T1.surrogate_key, DT1.natural_key
  FROM (
        SELECT '0000000001', 22
        UNION ALL 
        SELECT '0000000002', 55
        UNION ALL 
        SELECT '0000000003', 99
       ) AS DT1 (natural_key, data_col)
       INNER JOIN Test1 AS T1
          ON T1.natural_key = DT1.natural_key;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top