The*_*ter 30 sql-server stored-procedures
我一直想知道sp中的临时表以及所有这些都会影响并发性.SP在MSSQL 08服务器上制作.
如果我有一个SP,我创建一个临时表并再次删除它:
BEGIN
CREATE TABLE #MyTempTable
(
someField int,
someFieldMore nvarchar(50)
)
... Use of temp table here
... And then..
DROP TABLE #MyTempTable
END
Run Code Online (Sandbox Code Playgroud)
这个SP会经常被调用,所以我的问题是这里是否会出现并发问题?
blo*_*art 22
也许.
前缀为#(#example)的临时表基于每个会话保留.因此,如果您的代码在另一个调用运行时再次调用存储过程(例如后台线程),则create调用将失败,因为它已经存在.
如果你真的担心使用表变量
DECLARE @MyTempTable TABLE
(
someField int,
someFieldMore nvarchar(50)
)
Run Code Online (Sandbox Code Playgroud)
这将特定于该存储过程调用的"实例".
不是真的,我在谈论SQL Server.临时表(带有单个#)存在,并且在创建它的范围内可见(范围限制).每次调用存储过程时,它都会创建一个新范围,因此临时表仅存在于该范围内.我相信临时表对于在该范围内调用的存储过程和udf也是可见的.但是,如果您使用双磅(##),那么它们会在您的会话中变为全局,因此作为创建临时表的会话的一部分对其他正在执行的进程可见,您将不得不考虑是否可以访问临时表同时是否合乎需要.
| 归档时间: |
|
| 查看次数: |
104075 次 |
| 最近记录: |