Wednesday, December 15, 2010

Şirket silindiğinde database de kalan kayıtlar

 Bir müşterideki eğitimde karşılaştığım ve iyi bir izlenim yaratmayan bir konunun çözümünü paylaşmak istedim. Ax ta açtığınız bir şirkette diyelim ki işlemler yaptınız. Sonra bu şirketi silmek istediniz ve sildiniz. Databasedeki tablolarda bu şirket ile ilgili tüm kayıtların silinmesini beklersiniz normal olarak. Çünkü artık bu dataareaid ye karşılık gelen bir şirketiniz yok.

Ama ne yazık ki hayatta her zaman istediğiniz olmuyor. Bazı tablolarda kayıtlar kalıyor. Tablo çeşiti main olan tablolar. Eğer bir gün gelir aynı isimde bir şirket açarsanız bilmeden, içinde siz yeni açıp boş dediğiniz database den bu kayıtlar geliyor. Canlı kullanımda olma olasığı çok az ama sıkıntı veren bir durum. Bug olup olmadığı araştırma konusu.

Ama bu konuda içinizin rahat etmesini istiyorsanız sildiğiniz bu şirket için aşağıdaki SQL scriptini kullanın.

Hasan Bilgin
ETG Danışmanlık
www.etg-it.com


DECLARE @_tableName nvarchar(40)
DECLARE @_companyId nvarchar(4)
SET @_companyId = N'';  -- replace  with required company
DECLARE curSqlDictionary CURSOR FOR
SELECT A.SQLNAME
FROM SQLDICTIONARY A
INNER JOIN SQLDICTIONARY X ON X.TABLEID = A.TABLEID AND X.FIELDID = 61448
WHERE A.FIELDID = 0
 AND A.FLAGS = 0
OPEN curSqlDictionary
FETCH NEXT FROM curSqlDictionary INTO @_tableName
WHILE @@FETCH_STATUS = 0
BEGIN
 DECLARE @_sql nvarchar(4000)
 SET @_sql = N'DELETE FROM ' + QUOTENAME(@_tableName) + N' WHERE DATAAREAID = @_dataAreaId'

 EXEC sp_executesql @_sql, N'@_dataAreaId nvarchar(4)', @_dataAreaId = @_companyId 

 FETCH NEXT FROM curSqlDictionary INTO @_tableName
END
CLOSE curSqlDictionary
DEALLOCATE curSqlDictionary


2 yorum:

Erdinç Akın said...

Merhaba, çok gerekli bir konuya değinmişsiniz. Bu konu benimde başıma gelmişti. Aslında danışman firmalar bu konuları pek umursamıyor biz kendi içimizde dikkat edip çözmüştük bu durumu. Ancak gerçekten canlı kullanım öncesi bir çok şirket açılabiliyor ve tablolarda temizlenmiyor. Dikkat edilmesi gereken bir konu...

Hasan Bilgin said...

Merhaba Erdinç Bey, dediğiniz gibi bu soruna test ortamında rastladım. Canlı sistemde olma olasılığı çok az ama ilk geçişlerde mutlaka bunu yapmak gerek. Ayrıca ortak tablo yaptığınız durumlarda da bu kayıtlar kalıyor. Bu kayıtlarda upgrade sorunu olarak karşınıza çıkıyor.

Post a Comment