Sql-Server-2005
有沒有辦法以程式方式編寫與給定表關聯的所有對象?
我知道在 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 年的過渡也是如此,我並不感到驚訝。幾年前,我對解密儲存過程失去了興趣。