Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 临时表索引在会话中是唯一的还是共享的?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 临时表索引在会话中是唯一的还是共享的?

Sql 临时表索引在会话中是唯一的还是共享的?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含许多临时表的大型查询(Web Dashboard query)。我在临时表上创建了索引。使用该查询的应用程序有一个具有不同权限级别的用户管理模块。我的问题是,是否像临时数据库一样为每个会话创建了索引? 我不希望在会话之间共享索引 我一直在做类似的事情 EXEC('CREATE INDEX idx_test'+ @sessionId + 'ON #TempTable (id1,id2)'); 这有必要吗。我见过一些开发人员这样做。临时表上的索引(#t,而不是##t)不在会话中共享,也

我有一个包含许多临时表的大型查询(Web Dashboard query)。我在临时表上创建了索引。使用该查询的应用程序有一个具有不同权限级别的用户管理模块。我的问题是,是否像临时数据库一样为每个会话创建了索引? 我不希望在会话之间共享索引

我一直在做类似的事情

EXEC('CREATE INDEX idx_test'+ @sessionId + 'ON #TempTable (id1,id2)');

这有必要吗。我见过一些开发人员这样做。

临时表上的索引(#t,而不是##t)不在会话中共享,也不需要为临时表上的索引发明唯一的索引名

与此不同的是(您可能已经从其他开发人员的代码中看到了这一点)是
CONSTRAINT
NAME。对于不同的表,索引名称可以重复多次,但约束名称在数据库中必须是唯一的

因此,您可能会看到存储过程的代码,这些存储过程创建了一个引用会话的约束名称,这是一种为约束指定唯一名称的尝试。因为如果启动一个存储过程,在两个会话中创建一个临时表#t,则每个会话都会使用自己的名称创建自己的表(不仅仅是#t,系统会向表名添加额外的符号,使其唯一)


但是,如果同一进程尝试创建约束PK_t,第一个会话将成功,但第二个会话将得到一个错误,即约束PK_t已经存在于数据库(tempdb)

临时表上的索引(#t,而不是###t)不会在会话之间共享,而且不需要为临时表上的索引发明唯一的索引名

与此不同的是(您可能已经从其他开发人员的代码中看到了这一点)是
CONSTRAINT
NAME。对于不同的表,索引名称可以重复多次,但约束名称在数据库中必须是唯一的

因此,您可能会看到存储过程的代码,这些存储过程创建了一个引用会话的约束名称,这是一种为约束指定唯一名称的尝试。因为如果启动一个存储过程,在两个会话中创建一个临时表#t,则每个会话都会使用自己的名称创建自己的表(不仅仅是#t,系统会向表名添加额外的符号,使其唯一)


但是,如果同一进程尝试创建约束PK_t,第一个会话将成功,但第二个会话将得到一个错误,即约束PK_t已存在于数据库(tempdb)

对于temp table,它仅适用于会话对于temp table,它仅适用于会话