Sql-Server-2005

有沒有辦法以程式方式編寫與給定表關聯的所有對象?

  • May 13, 2020

我知道在 SQL 管理工作室中,我可以右鍵點擊表/觸發器/鍵和script object as.... 給定對象的名稱,有沒有辦法以程式方式執行此操作?

如果是這樣,有沒有辦法找到與給定表關聯的所有對象(主鍵、外鍵、觸發器)並以程式方式編寫所有對象?

一種開始的方法如下:

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 “表”將告訴您有關數據庫中對象的一些資訊type(也是 xtype)列告訴您項目是什麼:使用者定義的表、儲存過程、觸發器等。

然後,您將希望sp_helptext吐出儲存過程的文本。這不會重現加密儲存過程的文本。

任何完整和完整的解決方案都將涉及程式,尤其是在涉及加密儲存過程和触發器時。一篇關於以程式方式確定數據庫中項目的範例文章。解密 SQL Server 2000 儲存過程所需的數據類型出現在 SQL Server 2005 中,因此您不能在 SQL Server 2000 中使用 SQL 來解密其自己的加密儲存過程(但您可以在 SQL Server 2005 中的 SQL 中解密它們)並且它會如果 2005 年到 2008 年的過渡也是如此,我並不感到驚訝。幾年前,我對解密儲存過程失去了興趣。

引用自:https://dba.stackexchange.com/questions/817