首页 / SQL Server / 正文

[SQL Server]SQL Server数据库中在创建存储过程前先检测是否存在,如果不存在则创建,如果存在则先删除再创建?

5348 1 发布于: 2019-07-11 读完约需4分钟

问题描述

SQL Server数据库中,在创建存储过程前先检测是否存在,如果不存在则创建,如果存在则先删除再创建?

方案一

使用IF EXISTS语句判断,如下:

IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[dbo].[MyProc]') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE [dbo].[MyProc]
END

方案二

如果你使用的是SQL Server 2016或者更高版本,那么可用使用CREATE OR ALTER PROCEDURE ...语句,如下:

CREATE OR ALTER PROCEDURE dbo.MyProc

SQL Server 2016的语法格式为:DROP { PROC | PROCEDURE } [ IF EXISTS ] { [ schema_name. ] procedure } [ ,...n ]

方案三

使用OBJECT_ID()函数检测存储过程是否存在,如下:

IF (OBJECT_ID('MyProcedure') IS NOT NULL)
  DROP PROCEDURE MyProcedure
GO

OBJECT_ID()函数还可接收两个参数,如:

IF OBJECT_ID('MyProcedure', 'P') IS NOT NULL
    DROP PROCEDURE MyProcedure
GO

其中的第二个参数可以有如下值:

AF = Aggregate function (CLR)
C = CHECK constraint
D = DEFAULT (constraint or stand-alone)
F = FOREIGN KEY constraint
FN = SQL scalar function
FS = Assembly (CLR) scalar-function
FT = Assembly (CLR) table-valued function
IF = SQL inline table-valued function
IT = Internal table
P = SQL Stored Procedure
PC = Assembly (CLR) stored-procedure
PG = Plan guide
PK = PRIMARY KEY constraint
R = Rule (old-style, stand-alone)
RF = Replication-filter-procedure
S = System base table
SN = Synonym
SO = Sequence object
TF = SQL table-valued-function

或者你可以使用如下SQL语句查询所有可用的参数,如:

SELECT name 
FROM master..spt_values
WHERE type = 'O9T'

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [SQL Server]SQL Server数据库中如何使用pivot函数将行转换成列(行列转换)?

下一篇: C#/.NET应用程序编程开发中如何获取Windows操作系统的基础信息以及BIOS的版本等?

本文永久链接码友网 » [SQL Server]SQL Server数据库中在创建存储过程前先检测是否存在,如果不存在则创建,如果存在则先删除再创建?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册