ฉันจะทราบได้อย่างไรว่าขั้นตอนหรือทริกเกอร์ที่เก็บไว้กำลังใช้ตารางใน SQL Server 2008 R2


9

นี่เป็นกรณีที่ใน DB ที่ฉันกำลังตรวจสอบมีตารางเก็บถาวรซึ่งเก็บประวัติผู้ใช้และมีทริกเกอร์หรือขั้นตอนการจัดเก็บที่หลังจากลบแถวออกจากตารางนี้ในบางครั้งเพื่อหลีกเลี่ยงการมีขนาดใหญ่เกินไป เหมือนกันฉันไม่ได้ออกแบบฐานข้อมูลฉันแค่ทำการบำรุงรักษาแอปพลิเคชันที่ใช้ฐานข้อมูลนี้ดังนั้นฉันจึงไม่ทราบชื่อของขั้นตอนหรือทริกเกอร์ที่เก็บไว้สิ่งที่ฉันต้องการทำคือค้นหาโพรซีเดอร์ที่เก็บไว้นี้ หรือทริกเกอร์ตรวจสอบรหัสและปรับเปลี่ยนเพื่อปล่อยให้ "ประวัติผู้ใช้" นี้ยาวขึ้นในตาราง

มีคนบอกให้ฉันตรวจสอบตาราง "sysobjects" ซึ่งฉันสามารถเห็นบางสิ่งบางอย่างที่มีชื่อเดียวกันของตารางได้ แต่นี่เป็นข้อมูลเดียวที่ฉันสามารถเรียกคืนได้คำแนะนำใด ๆ

ขอบคุณ.

คำตอบ:


6

ค้นหารหัสทั้งหมดโดยใช้sys.sql_modules

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

หรือใช้Red Gate SQL Searchซึ่งไม่มีค่าใช้จ่ายใด ๆ

อย่าใช้ syscomments หรือ INFORMATION_SCHEMA.RUBBISH


เพื่อนคนนั้นไม่สามารถคลิกขวาบนตารางเป้าหมายและกด "แสดงการพึ่งพา" (หรือข้อความบางส่วนของเอฟเฟกต์นั้น) ได้หรือไม่
Nick Chammas

@ Nick Chammas: ไม่นี่เป็นที่รู้จักกันดีว่าไม่น่าเชื่อถือ
gbn

@gbn ฉันเข้าใจว่า syscomments มีไว้สำหรับความเข้ากันได้แบบย้อนหลังและอาจถูกลบออกจากการเปิดตัวในอนาคต แต่คุณสามารถอธิบายเพิ่มเติมได้หรือไม่ว่าทำไมไม่ใช้ Information_SCHEMA? ขอบคุณ
datagod

@datagod: ทำไม syscomments เหมือนตัวเลือกที่ไม่ดีเสมอ: คอลัมน์คำจำกัดความคือ nvarchar (4000) ซึ่งหมายความว่าคุณอาจพลาดอ้างอิงตารางถ้าอยู่ในตำแหน่งสตริง> 4000 หรือช่วงเขตแดนระหว่าง nvarchar นี้ (4000) แถว (ขึ้นอยู่กับวิธีการที่คุณจัดการกับมันอาจ concat ผมคิดว่าถ้าคุณจริงๆต้องการ ...
GBN

@gbn ที่จริงsyscommentsมีหลายแถวสำหรับวัตถุที่จะไปเกินขีด จำกัด 4000 sys.sql_modulesตัวอักษรที่ทำให้คำสั่งที่ใช้มันเช่นเดียวกับที่ถูกต้องเป็น ฉันยังคงแนะนำsys.sql_modulesแต่เนื่องจากsyscommentsค่าเสื่อมราคา
Kenneth Fisher

4

ลองใช้ApexSQL Search

ApexSQL Search เป็นฟรี SQL Server Management Studio และ Visual Studio add-in ที่มีคุณสมบัติอื่น ๆ ที่มีคุณสมบัติการพึ่งพาการดู คุณลักษณะการพึ่งพาการดูมีความสามารถในการเห็นภาพความสัมพันธ์ของวัตถุฐานข้อมูล SQL ทั้งหมดรวมถึงความสัมพันธ์ระหว่างวัตถุที่เข้ารหัสและระบบวัตถุเฉพาะของ SQL Server 2012 และวัตถุที่เก็บไว้ในฐานข้อมูลที่เข้ารหัสด้วย Transparent Data Encryption (TDE)

คุณลักษณะการพึ่งพาการดูยังช่วยให้คุณสามารถตั้งค่าและปรับแต่งเค้าโครงแผนภาพการอ้างอิงภาพรวมถึงความสัมพันธ์ที่จะนำเสนอเค้าโครงและขนาดของแผนภาพที่สร้างขึ้นและความลึกของการเจาะลึกของการอ้างอิง

คำเตือน: ฉันทำงานให้กับ ApexSQL ในฐานะวิศวกรสนับสนุน


2

สำหรับการอ้างอิงในอนาคต ณ ปี 2008 ยังมี DMV ที่สามารถใช้ได้ sys.dm_sql_referencing_entities. ฉันมักชอบที่จะใช้ SQL_Modules เพราะหลีกเลี่ยงการบวกเท็จในสิ่งอื่น ๆ ฉันพูดถึงที่นี่แต่โดยทั่วไปถ้าคุณมีรหัสเช่นนี้:

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

คุณจะจบลงด้วยผลลัพธ์สำหรับตาราง ABC, ตาราง ABCLog มุมมอง vw_ABC, กระบวนงานที่เก็บไว้ sp_Update_ABC ฯลฯ นอกจากนี้ความรู้ของฉันที่ดีที่สุด DMV จะจัดการ SPs ที่เข้ารหัสและไม่ได้เข้ารหัสในขณะที่วิธี sql_modules ทำงานได้กับ SP ที่ไม่ได้เข้ารหัสเท่านั้น .

แบบสอบถาม DMV รุ่นเดียวกันคือ:

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

1

นอกจากนี้คุณสามารถใช้มุมมองแค็ตตาล็อกsys.sql_expression_dependencies ใช้แบบสอบถามนี้:

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'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.