【发布时间】:2011-01-05 12:54:06
【问题描述】:
我有一个 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
...
如何添加对存储过程是否存在的检查,如果不存在则创建它,如果存在则更改它?
【问题讨论】:
-
不,它不起作用,因为这会创建一个据称不是您想要的存储过程。从我们所看到的,它也不会在完成后丢弃它,因此它肯定存储在术语的各个方面。 不是与为什么需要非存储过程无关
-
“非存储”过程是什么意思?您的示例所做的只是重新创建一个存储过程;这和你的问题有什么关系?
-
好的,我们开始吧。问题是,我有一个巨大的 SQL 脚本,许多客户都在使用它,并且每次客户执行我们软件提供的“数据库管理”功能时都必须彻底运行它。因此,其中一些客户端可能已经在运行脚本时存储了该过程,而有些则可能没有。我知道这很愚蠢,我实际上不需要这个过程来保持未存储状态,我可以检查它是否存在,如果不存在则创建它。但是,无论我如何尝试弯曲 T-SQL 语法,都会出现错误。
-
每次他们运行脚本时,它都会尝试再次创建过程(不幸的是,所有内容都必须在同一个 .sql 文件中编写脚本,包括创建过程调用)。 IF NOT EXISTS THEN CREATE 由于语法限制而无法工作。我能做什么?
标签: sql sql-server tsql stored-procedures