Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程被随机丢弃_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 存储过程被随机丢弃

Sql 存储过程被随机丢弃,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我们最近在登台和生产环境中遇到了一个奇怪的问题。我们已经在SQLServer2005上运行了存储过程的更新脚本,验证了新的更改,并开始在我们的产品上使用它。一段时间后,数据库中丢失了相同的存储过程。除我们打算使用的任务外,任何其他任务都没有使用此存储过程。我们已经检查了所有代码和部署脚本,但找不到删除存储过程的跟踪 这个问题不会发生在我们的开发和QA环境中,而只发生在登台和生产环境中 有人能帮忙吗 亲切问候, Mafaz如果您排除了明显的蓄意破坏,那么我建议您仔细查看该程序的参考资料-可能存在以

我们最近在登台和生产环境中遇到了一个奇怪的问题。我们已经在SQLServer2005上运行了存储过程的更新脚本,验证了新的更改,并开始在我们的产品上使用它。一段时间后,数据库中丢失了相同的存储过程。除我们打算使用的任务外,任何其他任务都没有使用此存储过程。我们已经检查了所有代码和部署脚本,但找不到删除存储过程的跟踪

这个问题不会发生在我们的开发和QA环境中,而只发生在登台和生产环境中

有人能帮忙吗

亲切问候,


Mafaz

如果您排除了明显的蓄意破坏,那么我建议您仔细查看该程序的参考资料-可能存在以下意外失误:

IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc1')
  DROP PROCEDURE Proc1
GO

CREATE PROC dbo.Proc1
  AS
    ...

<< MISSING GO!

IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc2')
  DROP PROCEDURE Proc2
GO

CREATE PROC dbo.Proc2
  AS
  ...
i、 在上面的例子中,由于Proc1定义末尾缺少GO,DROP过程Proc2代码被追加到无关Proc1的定义中。每次运行Proc1时,它都会删除Proc2,如果已经删除Proc2,则if exists将不方便地隐藏错误

类似地,另一个常见的问题是将GRANT EXEC留在过程的底部-如果权限不严格,这可能会破坏过程的性能


这里最好的建议是使用最小权限执行应用程序,这样它就不能执行DDL,比如DROP或GRANT。这样,当执行Proc1时,应用程序将中断,使您能够快速跟踪违规代码。

您调查了日志/事件查看器吗?您好,感谢您的建议,Jade无法跟踪任何可疑的内容。但是@StuartLC先生,非常感谢,我能够通过查看您建议的sys.sqlmodules来跟踪这个bug,正如您所预料的,这个bug是在部署脚本中,在创建以前的SP时,有问题的SP的后续drop语句之前缺少了一个GO关键字,这导致在上一个SP中包含DROP语句。非常感谢…非常感谢。我不相信你的回答,直到它发生在我身上!!