如何在SQL Server中以编程方式复制和重命名视图/SP?

如何在SQL Server中以编程方式复制和重命名视图/SP?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我知道您可以右键单击所选视图/SP并选择“创建到”,然后只需复制生成的脚本即可。但这必须通过SQL客户机完成 我希望做的是,每当供应商对视图/SP进行更新时,我都希望在运行供应商的ALTER VIEW/SP命令之前对受影响的视图/SP执行备份。我希望使用脚本而不是人机界面来实现这一点,以减少人为错误的风险 有人能帮忙吗?下面是一个链接,您可以从中找到如何使用C代码创建/更改/删除存储过程 您可以使用C或所需的技术以这种形式创建前端formGUI 您可以输入存储过程的详细信息 以下是在数据库中运行

我知道您可以右键单击所选视图/SP并选择“创建到”,然后只需复制生成的脚本即可。但这必须通过SQL客户机完成

我希望做的是,每当供应商对视图/SP进行更新时,我都希望在运行供应商的ALTER VIEW/SP命令之前对受影响的视图/SP执行备份。我希望使用脚本而不是人机界面来实现这一点,以减少人为错误的风险


有人能帮忙吗?

下面是一个链接,您可以从中找到如何使用C代码创建/更改/删除存储过程

您可以使用C或所需的技术以这种形式创建前端formGUI 您可以输入存储过程的详细信息

以下是在数据库中运行的脚本,用于查找更改/创建的存储过程的详细信息

SELECT name 'Alterd Procedures'
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < 5

SELECT name 'Created Procedures'
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,create_date, GETDATE()) < 5
5是天数,您可以根据需要进行更改


您可以将视图的“p”更改为“V”

这应该可以让您开始了

DECLARE @SQL VARCHAR(MAX)
SET @SQL = (    SELECT  Routine_Definition
                FROM    (   SELECT  Routine_Catalog, Routine_Schema, Routine_Name, Routine_Definition
                            FROM    INFORMATION_SCHEMA.ROUTINES
                            WHERE   Routine_type  = 'PROCEDURE'
                            UNION ALL
                            SELECT  Table_Catalog, Table_Schema, Table_Name, View_Definition
                            FROM    INFORMATION_SCHEMA.VIEWS
                        ) def
                WHERE   Routine_Catalog = 'YourDatabase'
                AND     Routine_Schema = 'YourSchema'
                AND     Routine_Name = 'YourView/SP'
            )

IF @SQL IS NULL
    RETURN

EXEC SP_RENAME 'YourDatabase.YourSchema.YourView/SP', 'NewName', 'OBJECT'
EXEC (@sql)

实际上,我所说的编程方式是通过SQL脚本。我不擅长开发语言。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!或者您可以使用更合适的系统目录视图、sys.procedures或sys.tables…..感谢更新的脚本。我喜欢这些脚本,它显示了哪些SP被更改的审计跟踪。但是,如果我想回滚修改过的SP,我该如何做?谢谢!这适用于SP,但不适用于VIEW。显然,在INFORMATION\u SCHEMA.ROUTINES表中没有routine\u type=VIEW。对不起,我在发布之前没有真正检查这个。。。我已经将答案更新为现在包含视图以及存储过程和函数。