Aracılığıyla paylaş


Ekleme, güncelleştirme ve BIRLEŞTIRME kullanarak veri silme

InSQL Server 2008ekleme, güncelleştirme veya silme işlemleri tek bir deyim kullanarak gerçekleştirebilir, birleştirme deyimini.Veri birleştirmek birleştirme ifade veren kaynak hedef tablo veya görünümü ve bu birleştirmek sonuçlarına dayalı hedef karşı birden fazla eylemi gerçekleştirin.Örneğin, birleştirme İŞLEMİNİ kullanabilirsiniz deyim aşağıdaki işlemleri gerçekleştirmek için:

  • Koşullu olarak ekleme veya güncelleştirme hedef satırların tablo.

    Hedef satır varsa, tablo, bir veya birkaç sütun güncelleştirme; aksi durumda, verileri yeni bir satır ekleyin.

  • İki tablo eşitleyin.

    Eklemek, güncelleştirmek veya hedef satırları silmek tablo farklılıkları kaynak verilerle bağlı.

BİRLEŞTİRME sözdizimi beş birincil yan oluşur:

  • Birleştirme yan tümce belirler tablo veya hedefi olan ekleme, görünümü güncelleştirme veya silme işlemleri.

  • Kullanmayı yan belirtir verileri kaynak hedef. ile birleştirilmiş

  • ON yan tümce yeri belirleyen birleştirmek koşulları belirtir hedef ve kaynak eşleşme.

  • Zaman yan (eşleşen, NOT eşleşen BY HEDEFİ ve NOT eşleşen BY kaynak) göre ON yan tümce ve bir ek arama ölçütleri belirttiğiniz zaman yan tümceleri. sonuçlarını almak için eylemleri belirleyin

  • Çıktı yan tümce eklendiğinde, güncelleştirildiğinde veya silindiğinde, hedef her satır için bir satır döndürür.

Kurallar ve sözdizimi hakkında tam bilgi için bkz:BIRLEŞTIRME (Transact-SQL).

Kaynak ve hedef arama koşullarını belirleme

Kaynak ve hedef veri tek bir giriş akımına nasıl birleştirilir ve gerekli olmayan satırları ek arama ölçütleri için doğru kullanılabilir nasıl filtre önemlidir.Aksi durumda, hatalı sonuçlar üreten bir şekilde ek arama ölçütleri belirtebilir.

Kaynak satır satır açık belirtilen birleştirmek koşulunu temel hedef ile eşleştirilir yan tümce.Birleşik Giriş akışı sonucudur.Giriş satırı bir ekleme, güncelleştirme veya silme işlemi gerçekleştirilir.Belirtilen zaman yan bağlı deyim, giriş satırı aşağıdakilerden biri olabilir:

  • Ve bir hedef için bir satır içeren bir eşleşen çifti kaynak.Bu sonucu OLDUĞUNDA, MATCHED yan tümce.

  • Bir satıra karşılık gelen satır hedef olan kaynak.Bu sonucu OLDUĞUNDA, NOT eşleşen hedef BY yan tümce.

  • Bir satıra karşılık gelen satır veri kaynağına sahip hedef.Bu sonucu OLDUĞUNDA, NOT eşleşen kaynak BY yan tümce.

Ne zaman sorgu işlemcisi tarafından uygulanır ve sonuç Giriş akışı etkiler birleştirmek türünü belirler yan tümceleri birleştirmek deyiminde belirtilen bileşimi.Göstermek için aşağıdaki örnek kaynak ve hedef tabloları ve verileri göz önünde bulundurun.

Aşağıdaki tabloda, olası birleştirmek türlerini listeler ve sorgu iyileştiricisi tarafından her zaman uygulanan gösterir.Tablo kaynak ve hedef tablo, kaynak ve hedef verileri eşleştirmek için arama ölçütü de bu örnek için elde edilen giriş akışı gösterirSource.EmployeeID = Target.EmployeeID.

birleştirmek türü

Uygulama

Örneğin Giriş akışı sonuçlar

İÇ birleştirmek

OLDUĞUNDA ise yalnızca belirtilen zaman yan MATCHED yan tümce.

SrcEmpID KaynakAdı TrgEmpID TrgName

-------- ------- -------- -------

null null null null

SOL dış birleştirmek

ZAMAN NOT eşleşen hedef BY yan tümcesinde belirtilen zaman NOT eşleşen kaynak BY yan tümcesinde belirtilir.ZAMAN MATCHED olabilir veya belirtilmemiş.

SrcEmpID KaynakAdı TrgEmpID TrgName

------------------------------100 Mary null null

101 Sara null null

102 Şirketinden Stefano null null

SAĞ DIŞ BİRLEŞİM

WHEN the MATCHED yan tümce ve WHEN the NOT eşleşen kaynak BY yan tümcesinde belirtilir, ancak WHEN the BY eşleşen değil hedef yan belirtilmemiş.

SrcEmpID KaynakAdı TrgEmpID TrgName

------------------------------NULL NULL 103 CAN

null null 104 Emre

TAM DIŞ birleştirmek

ZAMAN NOT eşleşen hedef BY yan tümce ve WHEN the NOT eşleşen kaynak BY yan tümcesinde belirtilir.ZAMAN MATCHED olabilir veya belirtilmemiş.

SrcEmpID KaynakAdı TrgEmpID TrgName

------------------------------100 Mary null null

101 Sara null null

102 Şirketinden Stefano null null

null null 103 CAN

null null 104 Emre

YARI BİRLEŞTİRME KORUMA

OLDUĞUNDA ise yalnızca belirtilen zaman yan NOT eşleşen kaynak BY yan tümce.

TrgEmpID TrgName

-------- -------

100 CAN

101 Sara

102 Şirketinden Stefano

Örneğin Giriş akışı sonuçlar bağlı OLDUĞUNDA yan birleşimi Giriş akışı sonuçlar gösterir.Şimdi hedef aşağıdaki eylemleri gerçekleştirmek istediğinizi varsayalım tablo giriş Bu akışta göre:

  • Hedef Tablo ve kaynak çalışanın adı, kimliği yok çalışan ile başlatıldığında kaynak tablosundan bir satır eklemek getirdiği '.

  • Hedef satır silmek tablo başladığında hedef çalışan adı ile getirdiği ' ve kimliği veri kaynağında yok çalışan tablo.

Bu eylemleri gerçekleştirmek için aşağıdaki zaman yan tümcesi gereklidir:

  • HEDEF İLE EŞLEŞEN, DAHA SONRA EKLE

  • KAYNAK TARAFINDAN EŞLEŞEN, SİLİN

Önceki'de açıklandığı gibi tablo, OLDUĞUNDA her iki yan eşleşen NOT belirtilirse, sonuç Giriş akışı olan bir tam dış birleştirmek kaynak ve hedef tablo s.Giriş akışı sonuçlar bilinen artık, ekleme, güncelleştirme ve silme işlemleri için Giriş akışı nasıl uygulanacağını göz önünde bulundurun.

Daha önce belirtildiği gibi zaman yan gerçekleştirilecek eylemleri belirtmek temel sonuçlar ON yan tümce ve zaman yan tümcelerini belirtilen herhangi bir ek arama ölçütleri.Çoğu durumda, arama koşulu ON belirtilen yan tümce gerekli Giriş akışı oluşturur.Ancak, etkilenen satır ile başlayan bir çalışan adı olan kayıtlarla sınırlandırmak için ek süzme örnek senaryoda, ekleme ve silme eylemleri gerektirir getirdiği '.Aşağıdaki örnekte, filtre koşulları için zaman uygulanan değil eşleşen BY hedef ve WHEN the NOT eşleşen BY kaynak.Çıktısı deyim Giriş akışı'den beklenen satırlar düzeltildi, eklenen, silinen veya gösterir.

Burada, sonuçlar, OUTPUT yan tümce.

$ Eylem ÇalışanNo EmployeeName ÇalışanNo EmployeeName

--------- ----------- ------------ ----------- ------------

DELETE NULL NULL 101 Sara

DELETE boş 102 şirketinden Stefano NULL

104 Emre INSERT null null

(3 satırları etkilenen)

ON yan tümce için ek bir arama koşulu belirterek işlemin ilk aşamalarında Giriş akışı satır sayısını azaltmayı (örneğin, belirterek ON Source.EmployeeID = Target.EmployeeID AND EmployeeName LIKE 'S%'). sorgu performansını artırmak için görünebilirAncak bunun büyük bir şekilde beklenmeyen ve yanlış sonuçlara neden olabilir.Ek arama koşulları ON belirtildiği için yan tümce kullanılmayan kaynak ve hedef verileri eşleştirmek için misapplied.

Aşağıdaki örnek, nasıl yanlış sonuçlar gösterir ortaya çıkabilir.Kaynak ve hedef tabloları ve satırlara filtre uygulama için ek bir arama koşulu ile eşleştirmek için arama koşulu her ikisi de belirtilirse açık yan tümce.Ek arama koşulu kaynak ve hedef eşleşen belirlemek için gerekli olduğundan, ekleme ve silme eylemleri tüm giriş satırlara uygulanır.Filtreleme de etkili koşulEmployeeName LIKE 'S%'göz ardı edilir.İfade çalıştırıldığında, çıktı,insertedvedeletedtablolarını gösterir iki yanlış değişiklik: Mary hedef yanlış silinmiş tablo, ve CAN yanlış eklenir.

Burada, sonuçlar, OUTPUT yan tümce.

$ Eylem ÇalışanNo EmployeeName ÇalışanNo EmployeeName

--------- ----------- ------------ ----------- ------------

DELETE NULL NULL 100 CAN

DELETE NULL NULL 101 Sara

DELETE boş 102 şirketinden Stefano NULL

103 CAN INSERT null null

104 Emre INSERT null null

(5 satırları etkilenen)

Arama koşulu yönergeleri

Arama koşullarını kaynak ve hedef satırları eşleştirmek için kullanılan ek arama koşulları ya da kaynak satırları süzmek için kullanılan ve doğru sonuçlar elde edilen emin olmak için hedef doğru belirtilmelidir.Aşağıdaki yönergeleri öneririz:

  • Yalnızca arama koşulları belirlemeON <merge_search_condition>yan tümce kaynak ve hedef tablolar. veri eşleştirme ölçütlerini belirlemeDiğer bir deyişle, kaynak tablo, karşılık gelen sütunları karşılaştırılır sütunları hedef tabloda belirtin.

  • Sabit gibi diğer değerlere karşılaştırmaları dahil etmeyin.

Kaynak veya hedef tablodaki satırlara filtre için aşağıdaki yöntemlerden birini kullanın:

  • Satır uygun OLDUĞUNDA yan tümcesinde süzme arama koşulu belirleyin.Örneğin,WHEN NOT MATCHED AND S.EmployeeName LIKE 'S%' THEN INSERT....

  • Kaynak veya hedef Süzülen satırları döndüren bir görünüm tanımlamak ve kaynak veya hedef tablo görünümü başvuru.Görünümün Hedef tabloda tanımlanmışsa, herhangi bir eylem, karşı görünümlerini güncelleştirmek için gerekli koşulları karşılamak gerekir.Bir görünüm kullanarak veri güncelleştirme hakkında daha fazla bilgi için bkz:Bir görünümü kullanarak verileri değiştirme.

  • Use ile<Genel tablo ifade>yan tümce kaynak veya hedef tablo. satır filtre içinBu yöntem ON yan tümcesinde ek arama ölçütleri belirtmek için benzer ve yanlış sonuçlar doğurabilir.Bu yöntem kullanmaktan kaçının veya uygulamadan önce sınamanız önerilir.

Örnekler

C.Basit bir mektup BİRLEŞTİRMEYİ kullanarak deyim Ekle ve güncelleştir işlemleri için

Varsayalım elinizde birFactBuyingHabits tablo bir veri ambarı veritabanı, her müşterinin son tarih izleyen bir özel ürün. satın İkinci bir tabloSatın alma, bir OLTP, veritabanı kayıtlarını satınalma bir belirli bir hafta. sırasında Belirli müşterileri hiçbir zaman önce gelen alan ürün satırı eklemek istediğiniz her hafta,Satın almaFactBuyingHabits tablosunu. tablo , Zaten satın önce satırları ürünleri satın alan müşteriler, yalnızca satınalma tarih güncelleştirmek istediğinizFactBuyingHabits tablo.Bu ekleme ve güncelleştirme işlemlerini tek bir gerçekleştirilmesi deyim mektup BİRLEŞTİRMEYİ kullanarak.

Aşağıdaki örnek, ilk tablo oluştururPurchasesveFactBuyingHabitsbazı örnek veri. yüklerbirleştirmek deyimleri performansı artırır; bu nedenle, birincil anahtar kısıtlaması oluşturarak kümelenmiş dizinler oluşturulur UNIQUE dizinleri birleştirmek anahtarı oluşturulduğundaProductIDsütunun her iki tablo.

In this example, Purchases contains purchases for the week of August 21, 2006.FactBuyingHabits contains purchases for the prior week; ordinarily this table would be populated with rows dating back much earlier.

Tabloları artık aşağıdaki verileri ile doldurulur:

dbo.Purchases

ProductID CustomerID PurchaseDate

----------- ----------- -----------------------

707         11794       2006-08-20 00:00:00.000

707         15160       2006-08-25 00:00:00.000

708         18529       2006-08-21 00:00:00.000

711         11794       2006-08-20 00:00:00.000

711         19585       2006-08-22 00:00:00.000

712         14680       2006-08-26 00:00:00.000

712         21524       2006-08-26 00:00:00.000

712         19072       2006-08-20 00:00:00.000

870         15160       2006-08-23 00:00:00.000

870         11927       2006-08-24 00:00:00.000

870         18749       2006-08-25 00:00:00.000

dbo.FactBuyingHabits

ProductID CustomerID LastPurchaseDate

----------- ----------- -----------------------

707         11794       2006-08-14 00:00:00.000

707         18178       2006-08-18 00:00:00.000

864         14114       2006-08-18 00:00:00.000

866         13350       2006-08-18 00:00:00.000

866         20201       2006-08-15 00:00:00.000

867         20201       2006-08-14 00:00:00.000

869         19893       2006-08-15 00:00:00.000

870         17151       2006-08-18 00:00:00.000

870         15160       2006-08-17 00:00:00.000

871         21717       2006-08-17 00:00:00.000

871         21163       2006-08-15 00:00:00.000

871         13350       2006-08-15 00:00:00.000

873         23381       2006-08-15 00:00:00.000

Olduğunu iki ürün-müşteri satır için her iki tabloda ortak unutmayın: Önceki hafta yanı sıra, hafta sırasında ürün 707 11794 müşteri satın ve doğru ürün 870 müşteri 15160'ın satın alınmasıyla aynıdır. Bu satırlar için de güncelleştirmeFactBuyingHabits THEN eşleşen yan tümce. WHEN kullanarak bu Satınalmalar Satınalmalar biçiminde kaydedilen tarih Biz tüm diğer satırlara yerleştirinFactBuyingHabits THEN eşleşen yan tümce. WHEN kullanarak NOT

B.GÜNCELLEŞTİR ve Sil işlemlerini gerçekleştirme

Güncelleştirmek için birleştirme aşağıdaki örnekte kullanırProductInventory, tabloAdventureWorksörnek veritabanı günlük, işlenir siparişlerine göreSalesOrderDetailTablo.Aşağıdaki mektup BİRLEŞTİRMEYİ kullanarak deyim,QuantitysütunProductInventoryTablo sayısı her gün için her ürün yer çıkartma ile güncelleştirilirÜrün sayısı 0 olarak bırakın veya aşağıda ürünün stok neden olur, bu ürünün satır silinirProductInventoryTablo.Kaynak tablo üzerinde toplanan NotProductIDsütun.Yoksa bu değil bitti, birden fazlaProductIDkaynak tablo hedef tablo ile eşleşmesi ve birleştirme neden deyim bir hata. geri dönmek için

C.INSERT, UPDATE ve DELETE işlemler yapma

Aşağıdaki örnek, eklemek, güncelleştirmek veya hedef satırları silmek için birleştirme kullanır tablo farklılıkları kaynak verilerle bağlı.Her bir bölüm beş bölümleri olan küçük bir şirkette yönetici göz önünde bulundurun.Şirket, kendi departmanları re-organize karar verir.BİRLEŞTİRME deyim re-organization sonuçlar hedef tablo dbo.Departments uygulamak için aşağıdaki değişiklikler uygulamanız gerekir:

  • Varolan bazı bölümleri değişmez.

  • Varolan bazı bölümleri yeni yöneticileri olur.

  • Yeni oluşturulan bazı bölümleri.

  • Bazı bölümlerden sonra reorganization bulunmaz.

Şu kod, hedef tablo oluşturur.dbo.Departmentsve yöneticileri ile doldurur

İçin bölümler yapılması için kuruluş değişiklikleri kaynak tablo saklanır. dbo.Departments_delta.Aşağıdaki kod oluşturur ve bu tabloyu doldurur:

Son olarak, hedef tablodaki şirket reorganization yansıtmak için aşağıdaki kod kullanır Kaynak tablosundaki karşılaştırma birleştirme ifadesinedbo.Departments_delta, hedef tablodbo.Departments.Bu karşılaştırma için arama koşulu ON tanımlanan yan tümce ifadesinin.Karşılaştırma sonuçlarına bağlı olarak, aşağıdaki eylemleri alınır.

  • İki tablo s varolan bölümler, hedef güncelleştirilir tablo yeni adları, yeni yöneticileri veya tablo ikisindeDepartments.Herhangi bir değişiklik varsa, hiçbir şey güncelleştirilir.Bu zaman gerçekleştirilir THEN eşleşen yan tümce.

  • Tüm bölümlerDepartments_deltaiçinde yok yokDepartmentsiçine eklenenDepartments.Bu gerçekleştirilir WHEN the THEN yan tümcesinin eşleşen değil.

  • Tüm bölümlerDepartmentsyok Kaynak tablosundakiDepartments_delta gelen silinirDepartments.Bu zaman yapılır değil MATCHED BY yan tümce THEN kaynak.