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