2016-03-21 22 views
0

"Öğrenciler" tablom var. Ben öğrencilerin öğe içeren torba olduğu gerçeğini eklemek istiyorum:Gerekli bir yabancı anahtar ekleme

Students: 
| Id | Name | BagId | 
|----|--------|-------| 
| 0 | Josh | 0 | 
| 1 | Emma | 2 | 

Bags: 
| Id | 
|----| 
| 0 | 
| 1 | 
| 2 | 

Items: 
| BagId | Item | 
|-------|---------| 
|  0 | Banana | 
|  0 | Apple | 
|  1 | Pen  | 
|  1 | Tissue | 
|  2 | Gun  | 

Ben bir çanta var edebilmek için öğrencinin dışındaki varlıkları istediğim için "Çanta" tablosunu ve BagId en ihtiyaç (ama eğer daha iyi bir fikrim var, ben tüm kulaklarım).

Benim sorun:

  • Henüz Students.BagId sütunu
  • Ben bunu istiyorum yok boş olmayan yabancı anahtar Zaten öğrenci
  • çok şey var
  • Çanta tablo

değil doldurulur => Ben Çantalar tablo doldurmak ve öğrenci oluşturulması arasındaki her öğrenciye bir BagId verebilir nasıl. BagId sütun ve yabancı anahtar kısıtlaması uygulanması?

(I Öğeler tablosunu doldurmak gerekmez, tüm çanta başlangıçta boş) Ben başarılı olamadı

UPDATE Students 
SET BagId = t.Id 
FROM (
    INSERT INTO Bags DEFAULT VALUES 
    OUTPUT INSERTED) as t 

gibi şeyler denedim.

Entity Framework 6 kullanıyorum ve bunu bir geçiş dahilinde yapmak istiyorum.

+0

çizgisinde bir şeyler yapabilir orada torbalar tablodaki veriler henüz değildir ve özel bir sql komut dosyası yazabilirsiniz varsayarsak? – Captain0

+0

@Julien Linq sorgusu kullanmak veya özel sql sql yazmak ister misiniz? – Rusty

+0

Captain0> Öğrencilerin çanta sahibi olmaktan başka varlıklar olmasını istiyorum. – Julien

cevap

1

değil torba kimliği olarak öğrenci kimliği kullanmak Neden,

DECLARE @Temp TABLE(
StudentId INT, 
BagId INT IDENTITY(1,1)) 

INSERT INTO @Temp(
    StudentId 
)(
    Select Id 
    from Students 
) 
SET IDENTITY_INSERT Bags ON 
INSERT INTO Bags(
    Id 
)(
    Select BagId 
    From @Temp 
) 
SET IDENTITY_INSERT Bags OFF 

UPDATE Students 
    Set BagId = T.BagId 
FROM Students S 
INNER JOIN @Temp T on T.StudentId = S.Id 

--just to show results 
Select * from Students 
Select * from Bags 
+0

Daha basit bir şey olmasını bekledim, ancak bunu yapacak , çok teşekkür ederim ! – Julien