Pages

Showing posts with label sql. Show all posts
Showing posts with label sql. Show all posts

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