相关疑难解决方法(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万
查看次数

如果在sql server中不存在,则创建存储过程

Oracle确实"创建或替换"语句.Sql server似乎没有 - 如果你是从Enterprise Manager编写脚本,它反而建议"删除并创建".在您对存储过程进行授权的任何情况下,丢弃和创建都是不可取的,因为它会丢弃您的数据库管理团队所做的任何授权.您真的需要"创建或替换"来帮助开发人员和管理员之间分离conerns.

我最近一直在做的是:

use [myDatabase]
go

create procedure myProcedure as
begin
  print 'placeholder'
end
go

alter procedure myProcedure as
begin
  -- real sproc code here
end
go
Run Code Online (Sandbox Code Playgroud)

这就是我想要的.如果该过程不存在,请创建它,然后更改正确的代码.如果该过程确实存在,则创建失败,并且alter使用新代码更新代码.

它为管理员创建了一个不同的问题,因为如果存储过程已经存在,则create会引发误导性错误.当然,当您想要的结果发生时,您不应该看到红色错误文本,这会产生误导.

有没有人有办法压制红色文字?我尝试过的所有内容都会导致'创建/更改程序必须是查询批处理中的第一个语句'以某种方式出错.

sql sql-server

20
推荐指数
3
解决办法
4万
查看次数

"SET NOCOUNT ON"是占位符存储过程主体的不错选择吗?

这些答案(1,2),使用代码这篇文章中,建议使用的语句SET NOCOUNT ON作为临时占位符/假体的尸体将很快覆盖的存储过程.

这些答案和那篇文章都没有说明为什么 SET NOCOUNT ON被选为临时存储过程体的值.

我的问题:为什么SET NOCOUNT ON一个临时存储过程体的好选择(如果一切顺利)将在后续操作中被覆盖?还有更好的选择吗?

可能构成一个好的临时/占位符存储过程体的一些标准:

  • 如果由于某种原因ALTER,存储过程的后续操作没有按计划发生,则在运行时以明显的方式失败;
  • 很容易理解未来的开发人员维护存储过程;
  • 不会增加任何重大开销.

sql-server stored-procedures

6
推荐指数
2
解决办法
1366
查看次数

标签 统计

sql-server ×3

sql ×2

stored-procedures ×2

t-sql ×1