问题描述
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'
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册