SQL Server 2005中的动态名称索引?

问题描述 投票:8回答:2

正如大多数使用Sql Server的人都知道的,您可以像这样声明一个临时表:

create table #foo 
    (
    row_id int identity not null primary key,
    bar varchar(50) not null default 'YoMomma'
    );

...这将在此临时表上创建主键和默认约束;这些对象的名称将是唯一的,由Sql Server动态创建。

创建表后,是否可以为该表创建一个动态命名的索引?我遇到一种情况,其中使用临时表的存储过程可能同时运行多个实例,并且我想提高性能而不会冒着tempdb数据库中同名对象之间发生冲突的风险。 CREATE INDEX命令需要一个明确的索引名称。

我正在寻找一种不涉及动态SQL而是仅涉及动态名称的解决方案。

sql sql-server sql-server-2005
2个回答
15
投票

这不是问题。索引名称仅在表范围内必须唯一,而不必在表范围内全局唯一。在整个数据库模式中,只有约束名称必须是唯一的。

因此,例如,您可以在多个并发连接中运行它而没有问题

CREATE TABLE #T
(
C INT
)

CREATE UNIQUE CLUSTERED INDEX ix on #T(C)

但是这并发失败

ALTER TABLE #T
ADD CONSTRAINT UQ UNIQUE NONCLUSTERED (C)

2
投票

应该可以:

CREATE INDEX #foo1 ON #foo(bar);
© www.soinside.com 2019 - 2024. All rights reserved.