我知道在 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)
Run Code Online (Sandbox Code Playgroud)
该sysdepends的“表”将告诉你哪些对象是依赖于另一个。它是分层的,因此您可能必须递归地运行 SysDepends,直到您开始获得空值。有时, sysdepends 是不完整的,这里是一篇带有其他一些建议的文章。
该系统对象“表”将告诉你一些东西有关数据库中的对象。类型(也称为 xtype)列告诉您项目是什么:用户定义的表、存储过程、触发器等。
然后您将希望sp_helptext吐出存储过程的文本。这不会重现加密存储过程的文本。
任何完整和完整的解决方案都将涉及编程,尤其是在涉及加密存储过程和触发器时。一篇关于以编程方式确定数据库中项目的示例文章。解密 SQL Server 2000 存储过程所需的数据类型出现在 SQL Server 2005 中,因此您不能在 SQL Server 2000 中使用 SQL 来解密它自己的加密存储过程(但您可以在 SQL Server 2005 中的 SQL 中解密它们),并且它会如果 2005 年到 2008 年的过渡也是如此,我也不会感到惊讶。几年前,我对解密存储过程失去了兴趣。