2013-03-03 28 views
6

Ben mevcut olan kayıtları, (otomatik oluşturulduğu gibi ID değil) sabit kalır.SQL Server while döngüsünde 2008 yerleştirin

Daha sonra yukarıda şimdi kimliği ve Hastane kimliği farklı olan iki yeni satırlar vardır

ID Hospital ID  Email    Description 
1  15   [email protected]   Sample Description 
2  15   [email protected]   Random Text 
3  32   [email protected]   Sample Description 
4  32   [email protected]   Random Text 

Bildirimi gibi görünmelidir. ID otomatik olarak oluşturulur.

Aynı güncelleştirmeleri yapmam gereken birkaç tablom var. Bunu bir süre döngü ile yapabilirsem imleci kullanmak istemiyorum.

EDIT Döngü boyunca döngü içinde daha basit bir çözüm olarak kabul edilen yanıtta sağlandı.

INSERT INTO TheTable(HospitalID, Email, Description) 
SELECT 32, Email, Description FROM TheTable 
WHERE HospitalID <> 32 

deneyin SQL ile döngüler önlemek için:

+1

Henüz bir şey denedin mi? – peterm

+0

Elbette. Ekleme sorgusunu nasıl yazacağımı bilmiyorum. @hospitalid int ve @@ RowCount ile döngü sırasında döngü ile bildirmeyi denedim. – Mukus

+0

Bazı kodları buraya koyun. – navi

cevap

12

ID bir kimlik sütunu olduğunu varsayarsak. Bunun yerine kümeler açısından düşünmeye çalışın.

+0

Bu sadece çalışır. Teşekkür ederim. Sadece öğrenmek için merak ediyorum, WHILE LOOP ile bir yol düşünebilir misiniz? Bu, sıcaklık değerlerini depolamak için geçici bir tablo oluşturmak anlamına mı geliyor? – Mukus

+3

Hiçbir zaman "WHILE" döngüsünü kullanmam. Kendimi böyle bir kod kullanarak bulduğumda, yaptığım şeyi durdurup baştan başlarım. –

19

Öncelikle, özellikle üretimde çoğu durumda SQL döngülerinden kaçınmanız gerektiğini John Saunders ile% 100 katılıyorum diyebilirim.

Fakat bazen bir tabloyu test amacıyla yüz kayıtla doldurmak için bir zaman meselesi olarak IMHO, sadece bir döngü kullanmaya başlamanızın keyfine varıyor. senin durumunda Örneğin

16 ile 100 arasında hastane kimlikleri ile kayıtları ile tablo doldurmak ve
CREATE PROCEDURE populateHospitals 
AS 
DECLARE @hid INT; 
SET @hid=16; 
WHILE @hid < 100 
BEGIN 
    INSERT hospitals ([Hospital ID], Email, Description) 
    VALUES(@hid, 'user' + LTRIM(STR(@hid)) + '@mail.com', 'Sample Description' + LTRIM(STR(@hid))); 
    SET @hid = @hid + 1; 
END 

kullanmış olabilir Ve sonuç olurdu e-postalar ve açıklamaları farklı hale getirmek için

ID Hospital ID Email   Description   
---- ----------- ---------------- --------------------- 
1 16   [email protected] Sample Description16 
2 17   [email protected] Sample Description17 
...              
84 99   [email protected] Sample Description99 
+0

Kabul edilen cevabım biraz değiştirilmiş olduğum şeyi yapıyor. Hastane kimliğini arttırmaya çalışmıyordum. Sorum, elde etmek istediğim şeyin örneğini gösteriyor. – Mukus

+0

@TejaswiRana Soru, örnek gösteriyor ancak arkasında niyet yok. İsterseniz HospitalID '32' için const değerini kullanabilirsiniz. Ancak mevcut kayıt kümelerini tıpkı bir sütunun değerini değiştirirken olduğu gibi aynen kopyalamak istiyorsanız, o zaman @JohnSaunders çözümünün en iyi yoludur. – peterm