2016-04-13 22 views
0

Bir tablonun sırayla çalışan bir dizi işlemden etkilenip etkilenmediğini ve her çalışmadan önce ve sonra tablonun durumunun ne olduğunu bilmesi gerekip gerekmediğini anlamaya çalışıyorum. Yapmaya çalıştığım şey, tüm işlemlerden önce db tablosundaki her tablonun bir sağlama toplamını bir tabloya kaydeden ve sonra her bir bittiğinde ve tablo sırasını bir sağlama toplamıyla güncelleştirdiğinde yeniden çalıştıran bir SQL çalışmasıdır. Tüm işlemler bittikten sonra, checksum'ları karşılaştırıyorum ve tüm satırları <> 'dan daha önce buluyorum.Veritabanındaki tüm tabloların sağlama toplamı olan tablo oluşturulsun mu?

Tek sorun, SQL için en iyi adam olmadığım ve biraz kaybolacağım.

select checksum_agg(binary_checksum(*)) from empcomp with (nolock) 

create table Test_CheckSum_Record (TableName varchar(max), CheckSum_Before int, CheckSum_After int) 


SELECT name into #TempNames 
FROM sys.Tables where is_ms_shipped = 0 

Ve yapmak istediğim için yalancı kod

foreach(var name in #TempNames) 
insert into Test_CheckSum_Record(name, ExecuteSQL N'select checksum_agg(binary_checksum(*)) from ' + name + ' with (nolock)', null) 

Ama nasıl kimse bu işe yarar gibi bir şey: Ben şu anda yaşıyorum İşte burada?

+0

Sadece CRUD işlemleri üzerinde değişiklikler mi arıyorsunuz, yoksa tablo yapısı/kısıtlamaları da değiştiğinde toplamı yeniden hesaplamak ister misiniz? – SCFi

+0

Sadece CRUD işlemleri. Şema hiç değişmemeli. Etkili bir şekilde, sadece herhangi bir tablonun verilerinin değişip değişmediğini ve eğer öyleyse tabloyu bilmem gerek. – Duckies

+0

Denetlemek istediğiniz tüm tabloların bir IDENTITY sütunu var mı? Aksi takdirde, bu uygulanabilir bir yaklaşım olmayabilir. –

cevap

0

Bir

select CHECKSUM_AGG([Columns you want to compare against]) from [ParentTable] mağaza yapabilirsiniz tetikleyici olarak

Create TRIGGER [TriggerName] ON [TableName] 
AFTER UPDATE, AFTER Delete, AFTER UPDATE 

olduğu tüm CRUD işlemleri işleyen bir tetikleyici oluşturmak için gereken yorumlarla bakılırsa ve sadece bir bayrak

Syntax'i yerleştirir Bir değişkende bu değer ve sütun öncesi sağlama çizelgesine karşı kontrol edin. Eğer daha önce girdi olarak DELETED tablolarla CHECKSUM_AGG değerini yeni bir giriş eklemek yoksa

eklenen tablo kullanmak için seçim değil unutmayın hesaplanan sütunlar

daha sonra düzenlemek olacaktır

benim için sadece tercihi olduğunu Kod eklemek için daha fazla zamanım olduğunda

İlgili konular