سؤال

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

وجزء من مخطط بلدي:

والمنتجات الجدول:

ProductName (key)
TemplateName
TemplateID
...

ولقد أضاف TemplateID، لكنه لا يملك أية بيانات في ذلك حتى الآن، وهي قيم الفارغة.

وقوالب الجدول:

TemplateID (key)
TemplateName
...

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

ويمكن أن أفعل هذا مع فرعي في التحديث، أو هل أنا بحاجة لكتابة بعض نوع من إجراء مخزن؟ أنا باستخدام SQL Server 2008

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

المحلول

ويمكنك أن تفعل ذلك مع استعلام UPDATE بسيط

UPDATE Products
SET Products.TemplateID = Templates.TemplateID
FROM Templates
WHERE Templates.TemplateName = Products.TemplateName

وأنت لا تحتاج إلى تحديد الجدول المنتجات في عبارة FROM، ولا جملة JOIN. فقط تحديد الجدول قوالب في عبارة FROM. يمكنك استخدام TABLENAME تستخدمها في بند UPDATE في جملة WHERE، لربط recordds من كلا الجدولين.

نصائح أخرى

وإليك الانضمام الحل. انها هام في هذا سيتم تحديث فقط الصفوف المتطابقة.

Update p
Set p.TemplateId = t.TemplateId
From Products p
  join Templates t
  On p.TemplateName = t.TemplateName

إليك الحل فرعي. سيتم تحديث كل صف من المنتجات، حتى عندما لا يكون هناك مباراة.

Update p
Set p.TemplateId =
(
  Select t.TemplateId
  From Templates t
  Where p.TemplateName = t.TemplateName
)
From Products p
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
   on Templates.TemplateName=Products.TemplateName
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top