【发布时间】:2014-04-18 06:21:15
【问题描述】:
我有一个在 .Net 网络服务中调用的存储过程,其工作方式如下(伪代码):
CREATE PROC SomeProc AS
BEGIN TRY
BEGIN TRAN
IF EXISTS (SELECT * FROM sys.tables WHERE name LIKE '#temp%')
DROP TABLE #temp;
CREATE TABLE #temp (...);
/* lots of logic here */
-- clear up
IF EXISTS (SELECT * FROM sys.tables WHERE name LIKE '#temp%')
DROP TABLE #temp;
COMMIT TRAN
END TRY
BEGIN CATCH
IF EXISTS (SELECT * FROM sys.tables WHERE name LIKE '#temp%')
DROP TABLE #temp;
ROLLBACK TRAN;
END CATCH
始终通过与数据库的相同连接(如配置文件中定义)访问 proc。
有人提出了一个担忧,即如果 web 服务和过程被快速连续调用两次,则存在第二次调用的临时表将被第一次调用删除的危险。
这是正确的吗?我认为 SQL Server 是同步的,所以不能同时调用两个过程,SQL 会将请求排队? This post 似乎表明我在做正确的事情,但多线程的答案让我很担心。任何澄清都会有所帮助。
【问题讨论】:
标签: sql-server web-services azure sql-server-2012