我有一个小的,一行更改(修改字符串中的拼写错误),我希望尽快部署到我们的生产SQL Server 2005服务器的存储过程。
我担心的是,如果在确切的时间运行alter语句来更新我的存储过程,会发生什么事情会发生某些事情同时调用该存储过程?
它是使用存储过程的上一个副本运行的,还是会导致某些损坏或错误?
考虑到SQL Server的ACID性质,我希望它是安全的。 它在同一时间运行的可能性很大,特别是因为SP非常小,但是我只是更喜欢确保,而且我也对答案感兴趣,仅用于教育目的。
可以说,ServerFault会是一个更好的地方,对不起,如果错误的话。
谢谢。
答案 0 :(得分:18)
对程序使用ALTER时,会设置架构修改锁。 SP仍然存在,但客户端必须等到ALTER执行。 这同样适用于ALTER,它会等到客户端不使用SP。
答案 1 :(得分:14)
我刚刚在SQL Server 2008 R2中对此进行了测试
我开始时:
CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO
然后我做了以下事情 SQL Server查询窗口1:
EXEC dbo.Stupid
SQL Server查询窗口2,而查询窗口1中的查询正在运行:
ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO
EXEC dbo.Stupid
SQL Server查询窗口3,而查询窗口1和查询窗口2中的查询正在运行:
EXEC dbo.Stupid
<强>结果:强>
会发生什么: