相关疑难解决方法(0)

如何在创建存储过程之前检查存储过程是否存在

我有一个SQL脚本,每次客户端执行"数据库管理"功能时都必须运行该脚本.该脚本包括在客户端数据库上创建存储过程.其中一些客户端在运行脚本时可能已经有了存储过程,有些可能没有.我需要将缺少的存储过程添加到客户端数据库中,但是我尝试弯曲T-SQL语法并不重要,我得到了

CREATE/ALTER PROCEDURE'必须是查询批处理中的第一个语句

在创作作品之前我已经读到了它,但我不喜欢这样做.

IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'MyProc')
DROP PROCEDURE MyProc
GO

CREATE PROCEDURE MyProc
...
Run Code Online (Sandbox Code Playgroud)

如何添加检查存储过程是否存在并创建它(如果它不存在)但如果存在则更改它?

sql t-sql sql-server stored-procedures

266
推荐指数
10
解决办法
50万
查看次数

如何添加"IF NOT EXISTS"来创建触发器语句

我正在使用sql server 2008 R2.更具体地说,Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 6.1上的Microsoft Corporation标准版(64位)(Build 7601:Service Pack 1) )(管理程序).我是sql server和procedures/triggers的新手.我有以下代码来创建一个触发器(它工作):

CREATE TRIGGER [dbo].[Insert_WithdrawalCodes] 
   ON  [dbo].[PupilWithdrawalReason] 
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;
        UPDATE [dbo].[PupilWithdrawalReason] SET DateCreated=dbo.SYSTEMTIME() 
        WHERE WithdrawalCodeID IN (SELECT WithdrawalCodeID FROM inserted)
END
Run Code Online (Sandbox Code Playgroud)

仅当触发器尚不存在时,如何有条件地创建?我在这做错了什么?Stackoverflow有很好的"如果不存在"的例子,但我不能让它与CREATE一起工作.这是我失败的努力之一:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'TR' AND name = 'Insert_WithdrawalCodes')
   exec('CREATE TRIGGER [dbo].[Insert_WithdrawalCodes] ON  [dbo].[PupilWithdrawalReason] AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE [dbo].[PupilWithdrawalReason] SET DateCreated=dbo.SYSTEMTIME() WHERE WithdrawalCodeID IN (SELECT WithdrawalCodeID FROM …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server triggers if-statement

34
推荐指数
4
解决办法
7万
查看次数