2011-03-23 33 views
0

我正在使用一个产品,在升级过程中drop并重新创建所有现有过程(基本上只需从INFORMATION_SCHEMA中找到所有正确的过程然后再删除),然后重新创建所有新的。我相信目的是确保所有程序都是最新的。删除和重新创建过程(SQL Server)

我目前遇到的问题是,在一个非常慢的客户数据库上,重新创建所有过程的脚本失败,说明过程已经存在。它看起来是因为某种原因,数据库服务器还没有赶上。

我曾尝试在滴和创建之间添加一个DBCC FREEPROCCACHE,但仍无济于事。关于如何让这项工作有用的想法?

+2

你是否100%确定所有sprocs都被删除?这似乎比数据库需要“赶上”更有可能。 – Paddy 2011-03-23 21:37:49

+0

产品是多线程的吗?创建是否可能在删除之前发送?我会运行一个跟踪来收集更多信息。 – 2011-03-23 21:44:24

+1

您是否知道删除重新创建过程将导致不同的权限?对程序所做的任何授予/拒绝都将被删除,而不是*重新创建。 – 2011-03-23 21:50:16

回答

3

检查proc是否属于与expexted不同的模式。

喜欢的东西myaccount.MyProc如果预计dbo.MyProc

1

顺便给我的答案,这样做的可能更可靠的方法将是对所有做过类似的存储过程脚本:

IF SPROC EXISTS 
THEN 
DROP IT 
GO 

CREATE SPROC 
GO 

这样可以使每一滴/创作为一个项目,你可以更确保存储过程实际上是被删除...

(顺便说一句 - 有没有可能是你的大缺失脚本在dbo模式中寻找一切,并且t他的数据库意外地在另一个模式中创建了一个sproc)?

相关问题