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

时间:2012-03-12 04:10:43

标签: sql sql-server tsql

我知道您可以右键单击选定的VIEW / SP并选择CREATE-TO,然后您可以复制生成的脚本。但这必须通过SQL客户端完成。

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

这应该让你开始。

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)

答案 1 :(得分:0)

以下是您可以使用C#代码

找到如何创建/更改/删除存储过程的链接

您可以使用C#或所需技术以此形式创建前端表单(GUI) 您的供应商输入存储过程的详细信息。

http://msdn.microsoft.com/en-us/library/ms162190.aspx

以下是您在Database中运行的脚本,以查找更改/创建存储过程的详细信息

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”以获取视图