我的一个 SP 中有以下逻辑:
if object_id('tempdb..##val','u') is null begin
create table ##val (
name varchar(512)
,val nvarchar(max)
)
end
insert ##val (name,val)values('some unique name','abcdef')
这个问题的答案表明检查if object_id(
,但我有这些担忧:
1)从竞争条件的角度来看,这个检查线程安全吗?具体来说,我需要使用sp_GetAppLock
/sp_ReleaseAppLock
吗?
2) if 条件是否保留表上的参考##val
?具体来说,由于不存在 ##val 表,所有其他会话是否有可能在条件 生成语句##val
的否定结果失败后立即释放引用?如果是的话,如何在不锁定该表中的行的情况下保留和保持当前会话的引用。if
insert
##val