มีวิธีสคริปต์ทางวัตถุทั้งหมดที่เกี่ยวข้องกับตารางที่กำหนดหรือไม่


9

ฉันรู้ว่าในสตูดิโอการจัดการ SQL ฉันสามารถคลิกขวาตาราง / ทริกเกอร์ / script object as...ที่สำคัญและ มีวิธีการทำโปรแกรมนี้โดยให้ชื่อวัตถุหรือไม่

ถ้าเป็นเช่นนั้นจะมีวิธีการค้นหาวัตถุทั้งหมด (คีย์หลัก, foreign foreign, triggers) ที่เชื่อมโยงกับตารางที่กำหนดและสคริปต์ทั้งหมดหรือไม่?

คำตอบ:


5

วิธีเริ่มต้นด้วยสิ่งนี้จะเป็นดังนี้:

DECLARE @TableName VARCHAR(50)
DECLARE @ObjectID INT
SET @TableName = '' -- the name of the objects you want to investigate

SELECT @ObjectID = [id]  FROM sysobjects WHERE name=@TableName

SELECT * FROM sysobjects WHERE name=@TableName
UNION
SELECT * FROM sysobjects WHERE id in (SELECT id FROM sysdepends WHERE depid= @ObjectID)

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

sysobjects "ตาราง" จะบอกคุณสิ่งบางอย่างเกี่ยวกับวัตถุในฐานข้อมูล คอลัมน์ประเภท (เช่น xtype) จะบอกคุณว่ารายการคืออะไร: ตารางที่ผู้ใช้กำหนด, proc ที่เก็บไว้, ทริกเกอร์ ฯลฯ

จากนั้นคุณจะต้องการsp_helptextเพื่อแยกข้อความของกระบวนงานที่เก็บไว้ สิ่งนี้จะไม่ทำซ้ำข้อความของขั้นตอนการจัดเก็บที่เข้ารหัส

โซลูชันที่สมบูรณ์และสมบูรณ์จะเกี่ยวข้องกับการเขียนโปรแกรมบางอย่างโดยเฉพาะเมื่อมีการเข้ารหัสขั้นตอนการจัดเก็บและทริกเกอร์ที่เกี่ยวข้อง บทความหนึ่งตัวอย่างเกี่ยวกับการกำหนดรายการในฐานข้อมูลโดยทางโปรแกรม ประเภทข้อมูลที่จำเป็นในการถอดรหัส procs ที่เก็บ SQL Server 2000 ปรากฏใน SQL Server 2005 ดังนั้นคุณไม่สามารถใช้ SQL ใน SQL Server 2000 เพื่อถอดรหัส procs ที่จัดเก็บที่เข้ารหัสของตัวเอง (แต่คุณสามารถถอดรหัสพวกเขาใน SQL ใน SQL Server 2005) ไม่แปลกใจที่ฉันถ้าเหมือนกันเป็นจริงสำหรับการเปลี่ยนแปลง 2005 ถึง 2008 ฉันหมดความสนใจในการถอดรหัสขั้นตอนการจัดเก็บเมื่อหลายปีก่อน


5

นี่เป็นเทคนิคใน C # โดยใช้ Server Management Objects - ฉันไม่รู้วิธีการใช้ T-SQL ล้วนๆ


นอกจากนี้คุณยังสามารถทำเช่นเดียวกันกับ powershell2.0
jcolebrand

3

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

หากคุณกำลังเขียนโค้ดเพื่อค้นหาข้อมูลทั้งหมดเกี่ยวกับวัตถุที่มีอยู่คำศัพท์ที่ต้องใช้สำหรับ google คือ "พจนานุกรมข้อมูลเซิร์ฟเวอร์ SQL"

ฉันจะให้ตัวอย่างเริ่มต้นให้คุณ

วิธีค้นหาข้อ จำกัด กุญแจต่างประเทศทั้งหมดในตารางที่ระบุ:

select * from information_schema.table_constraints where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_NAME = 'aspnet_Roles'

หากต้องการค้นหาข้อ จำกัด foreign key ทั้งหมดที่อ้างอิงตารางที่ระบุ:

select 
sys.foreign_keys.name as key_name,
pt.name as parent_table_name,
pc.name as parent_column_name,
ct.name as referenced_table_name,
cc.name as referenced_colum_name 
from sys.foreign_key_columns
inner join sys.foreign_keys on sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.object_id
inner join sys.tables pt on sys.foreign_key_columns.parent_object_id = pt.object_id
inner join sys.tables ct on sys.foreign_key_columns.referenced_object_id = ct.object_id
inner join sys.columns pc on sys.foreign_key_columns.parent_object_id = pc.object_id and sys.foreign_key_columns.parent_column_id = pc.column_id
inner join sys.columns cc on sys.foreign_key_columns.referenced_object_id = cc.object_id and sys.foreign_key_columns.referenced_column_id = cc.Column_id
where ct.name = 'aspnet_Applications'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.