在SQL Server 2005中动态命名索引?

Jer*_*acs 7 sql sql-server sql-server-2005

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

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

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

是否可以在创建表后为其创建动态命名的索引?我有一种情况,使用临时表的存储过程可能同时运行多个实例,我想提高性能,而不会冒tempdb数据库中具有相同名称的对象之间的冲突的风险. CREATE INDEX命令需要显式索引名称.

我正在寻找一个不涉及动态SQL的解决方案,只需要动态名称.

Mar*_*ith 14

这不是问题.索引名称不必是唯一的.只有约束名称才有.

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

CREATE TABLE #T
(
C INT
)

CREATE UNIQUE CLUSTERED INDEX ix on #T(C)
Run Code Online (Sandbox Code Playgroud)

但这会在并发下失败

ALTER TABLE #T
ADD CONSTRAINT UQ UNIQUE NONCLUSTERED (C)
Run Code Online (Sandbox Code Playgroud)

  • 嗯......用SQL Server工作了10年,我从来都不知道.我只是假设索引被视为类似于约束的对象,但我只是尝试了它并验证了没有冲突.好消息! (3认同)
  • @JeremyHolovacs - 约束获取存储在`sys.objects`中的元数据,我认为这是唯一性要求的原因,但索引却没有. (2认同)