2011-12-07 34 views
7

Như hầu hết những người làm việc với Sql Server biết, bạn có thể khai báo một bảng tạm thời như sau:Tự động đặt tên các chỉ mục trong SQL Server 2005?

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

... điều này sẽ tạo ra một khóa chính và một hạn chế mặc định trên bảng tạm thời này; tên của các đối tượng này sẽ là duy nhất, được tạo bởi Sql Server.

Có thể tạo chỉ mục được đặt tên động cho bảng sau khi được tạo không? Tôi có một trường hợp mà một thủ tục lưu trữ sử dụng các bảng tạm thời có thể chạy nhiều trường hợp cùng một lúc, và tôi muốn tăng hiệu suất mà không có rủi ro xung đột giữa các đối tượng có tên giống nhau trong cơ sở dữ liệu tempdb. Lệnh CREATE INDEX yêu cầu tên chỉ mục rõ ràng.

Tôi đang tìm một giải pháp không liên quan đến SQL động, chỉ tên động.

Trả lời

14

Đây là một vấn đề không. Tên chỉ mục không nhất thiết phải là duy nhất. Chỉ có các tên ràng buộc.

Vì vậy, ví dụ, bạn có thể chạy này trong nhiều kết nối đồng thời với không có vấn đề

CREATE TABLE #T 
(
C INT 
) 

CREATE UNIQUE CLUSTERED INDEX ix on #T(C) 

Nhưng điều này sẽ không dưới đồng thời

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

Hmmm ... 10 năm làm việc với SQL Server, và tôi không bao giờ biết điều đó. Tôi chỉ đơn giản giả định các chỉ mục được coi là các đối tượng tương tự như các ràng buộc, nhưng tôi đã thử nó và xác minh rằng không có xung đột. Thông tin tốt! –

+2

@JeremyHolovacs - các ràng buộc nhận siêu dữ liệu được lưu trữ trong 'sys.objects' mà tôi đoán là lý do cho yêu cầu duy nhất nhưng các chỉ mục thì không. –

+1

+1 Tốt, tôi đã ở dưới cùng một giả định như @JeremyHolovacs – Yuck

1

nên có thể làm:

CREATE INDEX #foo1 ON #foo(bar); 
+0

này thực sự dường như là câu trả lời. Cảm ơn! –

+0

Xin lỗi tôi đã phải thay đổi câu trả lời cho @MartinSmith ... câu trả lời của anh ấy chính xác hơn. –

+0

Không có vấn đề, chỉ vui vì bạn tìm thấy một giải pháp ... Bên cạnh đó, tôi thích Martin – Sparky

Các vấn đề liên quan