2016-04-05 23 views
0

Şirketim tüm rapor oluşturma tablolarını başka bir sunucuya taşıyor ve saklı yordamların canlı tablolara eriştiği tüm örnekleri bulmamız gerekiyor. Bu erişimleri kaldırın ve anlık görüntülere erişim ile değiştirin. Bakmam gereken birkaç saklı yordam var ve gözlerim her dosyada gezinmeye çalışarak kanamaya başlıyor. Belki bir regex saklanan her proc bakmak için en iyi olacağını düşündüm. Belki daha iyi bir yolu var mı?Depolanan Proc'da, iki şema hariç tablo adlarını (belki regex ile?) Arıyor

FROM veya JOIN olan tüm durumları "Snapshot" veya "EDI" ile başlamamış bir tabloyu (raporlarla ilişkili iki şema) izlemek için arıyorum. Ayrıca, eminim ki birisi kazara "FROm" yazdı, bu yüzden büyük/küçük harfe duyarlı olur. Ben de \ 's + yapmaya çalışıyorum çünkü birisi kaza anında birden fazla alan yazmış olabilir. dışlamak isteyen Örneğin

:

  • Anlık
  • GELEN
  • EDI
  • DAN Anlık
  • EDI

ve küçük harf duyarsız varyantları JOIN JOIN

Eğitimiyaptım, ama hala kısa geliyor. Şimdiye kadar var:

[fFjJ] [RroO] [oOiI] [mMnN] \ s +^$

Herhangi bir düşünce (yaylı | çekin | SNAP | EDI | | edi Edi!)?

DÜZENLEME: Bul ve Değiştir işlevini kullanarak SSMS 2016'daki normal ifadeyi kullanıyorum.

+0

Merak etme, kaç tane saklı prok konuşuyoruz? Tablo isminde benzer bir şey yapmanın daha kolay olacağını (ve “ondan” ve “katılmayı” göz ardı etmeyi) ve sonra kısa listeyle bir insanın geçip yanlış pozitifleri seçmesinin daha kolay olacağını düşünürdüm. – Becuzz

+0

Muhtemelen 100 kayıtlı prok. Bu iki şemayı hariç tutmak istiyorum çünkü başvurulan yüzlerce olası canlı tablo var (hepsi dbo şemada, ancak referanslar dbo niteleyici kullanmıyor olabilir). Bu iki şema referansını hariç tutarak, daha kolay istediğim verilere ulaşıyorum. –

cevap

1

Önümde SSMS 2016 yokken, docs bunun işe yarayacağını öneriyor.

(FROM|JOIN)\s+~((Snapshot|Edi)\.):a*> 

Dağılımı

(FROM|JOIN)   --Match the word from or join 
\s+     --match at least one bit of whitespace 
~(     --don't call it a match if this comes next 
    (Snapshot|Edi)\. --the word Snapshot or Edi followed by a period 
)     --end of the don't match prefix 
:a*     --match any number of alphanumeric characters (this is your table name, so you may need a different character class depending on what characters you use in your tables) 
>     --match the end of a word 

Ayrıca Bul bir seçenek olabilir ve harf duyarsız eşleştirme yapmak Değiştir iletişim kutusu olmalıdır.

+0

Bu iyi bir nokta. "Maç durumu" işaretlenmemişken, bu normal ifade küçük harf ve diğer kombinasyonlar için çalışır. Teşekkürler! –

0

T-SQL kullanarak Here on MSDN bulmanın çok daha iyi bir yolu olduğunu ortaya çıkarır. SP tarafından SP'ye gitmem gerekiyor, ancak bir regex kullanmaktan ve bazı sınırları unutmaktan çok daha hızlı ve daha az hata veriyor.

SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name, 
    o.type_desc AS referencing_desciption, 
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id, 
    referencing_class_desc, 
    referenced_server_name, referenced_database_name, referenced_schema_name, 
    referenced_entity_name, 
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name, 
    is_caller_dependent, is_ambiguous 
FROM sys.sql_expression_dependencies AS sed 
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id 
WHERE referencing_id = OBJECT_ID(N'EDI.Populate_IHP_OHN_Eligibility_Report') 
    AND referenced_schema_name NOT IN ('EDI', 'Snapshot');