Hangi saklı yordamın veya tetikleyicinin SQL Server 2008 R2'de bir tablo kullandığını nasıl bilebilirim?


9

Bu, denetlediğim DB'de, kullanıcı geçmişini tutan bir arşiv tablosu var ve bir süre sonra bu tablodan satırları silen büyük boyutlu bir boyuttan kaçınmak için bir tetikleyici veya mağaza yordamı var. aynı, ben DB tasarım vermedi, ben sadece bu DB kullanan bir uygulamanın bakım alıyorum, bu yüzden bu saklı yordamların veya tetikleyicilerin adını bilmiyorum, ne yapmak istiyorum bu saklı yordam bulmak veya tetikleyici, kodu kontrol edin ve bu "kullanıcı geçmişini" daha uzun bir tabloda bırakacak şekilde değiştirin.

Birisi bana "sysobjects" tablosunu kontrol etmemi söyledi, burada tablonun aynı adı taşıyan bir şey görebiliyorum, ama bu benim alabildiğim tek bilgi, herhangi bir tavsiye?

Teşekkür ederim.

Yanıtlar:


6

Tüm kodu sys.sql_modules kullanarak arayın

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

Veya tamamen ücretsiz olan Red Gate SQL Search'ü kullanın

Etmeyin syscomments veya INFORMATION_SCHEMA.RUBBISH kullanmak


Ayrıca hedef tabloya sağ tıklayıp "Bağımlılıkları Göster" (veya bu konudaki bazı metinler) üzerine vuramaz mı?
Nick Chammas

@Nick Chammas: hayır, bu güvenilmez olarak bilinir
gbn

@ gbn, sistemlerin geriye dönük uyumluluk için olduğunu ve gelecekteki bir sürümden kaldırılabileceğini anlıyorum, ancak neden BİLGİ_SCHEMA kullanmama konusunda ayrıntılı bilgi verebilir misiniz? thx
datagod

@datagod: aynı neden sistemlerin her zaman kötü bir seçim olduğu gibi: tanım sütunu nvarchar'dır (4000). Dize pozisyonunda> nvarchar arasındaki 4000 veya açıklıklı sınır (4000) satırlar (bunu nasıl ele bağlıdır, bu araçlar size herhalde Concat olabilir, bir tablo başvurusu kaçırabilir gerçekten ... istedi
GBN

@gbn Aslında syscomments4000 karakter sınırını aşan bir nesne için birden çok satırı vardır ve bu da onu kullanarak geçerli sorguları yapar sys.sql_modules. Hala tavsiye sys.sql_modulesberi ancak syscommentsamorti edilir.
Kenneth Fisher

4

ApexSQL Arama'yı deneyin

ApexSQL Search, diğer özelliklerin yanı sıra Görünüm Bağımlılıkları özelliğine sahip ÜCRETSİZ bir SQL Server Management Studio ve Visual Studio eklentisidir. Bağımlılıkları Görüntüle özelliği, şifreli ve sistem nesneleri, SQL Server 2012'ye özgü nesneler ve Saydam Veri Şifreleme (TDE) ile şifrelenmiş veritabanlarında depolanan nesneler de dahil olmak üzere tüm SQL veritabanı nesnelerinin ilişkilerini görselleştirme yeteneğine sahiptir.

Bağımlılıkları Görüntüle özelliği, sunulacak ilişkiler, oluşturulan diyagramın düzeni ve boyutu ve bağımlılıkların ayrıntı derinliği de dahil olmak üzere görsel bağımlılık diyagramı düzenini ayarlamanızı ve özelleştirmenizi sağlar.

Feragatname: ApexSQL için Destek Mühendisi olarak çalışıyorum


2

2008'den sonraki referanslar için kullanılabilecek bir DMV de vardır. sys.dm_sql_referencing_entities. Ben genellikle diğer şeyler arasında yanlış pozitifleri önler gibi SQL_Modules kullanmayı tercih. Burada tartıştım ama temelde böyle bir kod parçası varsa:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

ABC tablosu, ABCLog görünümü vw_ABC, saklı yordam sp_Update_ABC vb. Sonuçlarıyla sonuçlanacaksınız. Ayrıca bilgim dahilinde DMV şifrelenmiş SP'leri ve şifrelenmemiş SP'leri yalnızca şifrelenmemiş SP'lerle çalışacak .

Aynı sorgunun DMV sürümü şudur:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

1

Ayrıca sys.sql_expression_dependencies katalog görünümünü de kullanabilirsiniz . Bu sorguyu kullan:

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.