正如大多数使用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而是仅涉及动态名称的解决方案。
这不是问题。索引名称仅在表范围内必须唯一,而不必在表范围内全局唯一。在整个数据库模式中,只有约束名称必须是唯一的。
因此,例如,您可以在多个并发连接中运行它而没有问题
CREATE TABLE #T
(
C INT
)
CREATE UNIQUE CLUSTERED INDEX ix on #T(C)
但是这并发失败
ALTER TABLE #T
ADD CONSTRAINT UQ UNIQUE NONCLUSTERED (C)
应该可以:
CREATE INDEX #foo1 ON #foo(bar);