如果尚不存在则创建存储过程,但是不要更改并且不要删除现有的存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果尚不存在则创建存储过程,但是不要更改并且不要删除现有的存储过程相关的知识,希望对你有一定的参考价值。

我发现了一些示例,其中如果存在存储过程,则将其删除或更改。

但是我如何编写严格执行以下操作的T-SQL批处理脚本:

  • 检查存储过程是否存在:
    • [如果存在,则脚本根本不执行任何操作-我不想删除和重写或更改现有过程,因为它可能由其他人进行了更改
    • 如果不存在,则仅使用我的代码创建一个新过程

答案

创建存储过程时,它可能是批处理中的唯一语句。这意味着类似以下内容的操作将失败:

IF NOT EXISTS(SELECT 1 FROM sys.schemas s JOIN sys.procedures p ON s.schema_id = p.schema_id WHERE s.[name] = N'dbo' AND p.[name] = N'YourProcedure') BEGIN

    CREATE PROC dbo.YourProcedure @TableName sysname AS
    BEGIN

        SELECT *
        FROM sys.tables t
        WHERE t.name = @TableName;

    END;
END;

因此,如果要先检查该过程是否存在,然后如果不存在则创建它,则必须使用动态SQL:

IF NOT EXISTS(SELECT 1 FROM sys.schemas s JOIN sys.procedures p ON s.schema_id = p.schema_id WHERE s.[name] = N'dbo' AND p.[name] = N'YourProcedure') BEGIN

    EXEC sys.sp_executesql N'CREATE PROC dbo.YourProcedure @TableName sysname AS
BEGIN

    SELECT *
    FROM sys.tables t
    WHERE t.name = @TableName;

END;';
END;

以上是关于如果尚不存在则创建存储过程,但是不要更改并且不要删除现有的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

jQuery搜索文本页面并更改它,但如果它已经存在则不要

spark:模式更改——如果存在,则转换和过滤列上的数据框;如果没有就不要

如果执行 shell 失败,不要让 jenkins 构建失败

vb.net 怎么判断一个文件夹或是文本文件的存在?如果没有则创建……求代码!不要VB6.0的

如果文件存在,如何锁定文件,不要创建它?

Swift 2.1 Core Data - 保存具有一对多关系的数据,但如果已经存在则不要添加异构数据