2009-08-31 34 views
25
create table ImagenesUsuario 
{ 
    idImagen int primary key not null IDENTITY 
} 

Điều này không hiệu quả. Tôi có thể làm cái này như thế nào?Tạo nhận dạng SQL làm khóa chính?

+7

Trong tương lai, khi bạn nói "Điều này không có tác dụng", hãy xem xét giải thích ý của bạn là gì. Liệu nó âm thầm thất bại trong một số cách? Bạn có gặp lỗi không và nếu có thì lỗi là gì? Máy tính của bạn có tự phát tán không? Liệu nó không thành công khi bạn tạo bảng hoặc chèn các hàng vào bảng? –

Trả lời

55

thay đổi đơn giản để cú pháp là tất cả những gì cần thiết:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) primary key 
) 

Bằng cách sử dụng một cách rõ ràng "chế" từ khóa, bạn có thể cung cấp cho các ràng buộc khoá chính một tên cụ thể chứ không phải phụ thuộc vào SQL Server để tự động gán một cái tên:

create table ImagenesUsuario (
    idImagen int not null identity(1,1) constraint pk_ImagenesUsario primary key 
) 

Thêm "cụm" từ khóa nếu bạn thấy phù hợp nhất dựa trên việc bạn sử dụng bảng (ví dụ, sự cân bằng lượng tìm kiếm cho một idImagen nói riêng và số lượng văn bản giá trị hơn lợi ích của việc phân nhóm các bảng bởi một số chỉ số khác).

8

Điều này tương tự như các tập lệnh mà chúng tôi tạo trên nhóm của chúng tôi. Tạo bảng đầu tiên, sau đó áp dụng pk/fk và các ràng buộc khác.

CREATE TABLE [dbo].[ImagenesUsuario] (
    [idImagen] [int] IDENTITY (1, 1) NOT NULL 
) 

ALTER TABLE [dbo].[ImagenesUsuario] ADD 
    CONSTRAINT [PK_ImagenesUsuario] PRIMARY KEY CLUSTERED 
    (
     [idImagen] 
    ) ON [PRIMARY] 
+2

Có lý do nào khiến bạn tránh tạo khóa chính trong câu lệnh tạo bảng không? –

+3

Tôi giả định rằng chúng tôi ban đầu bắt chước các tập lệnh được tạo bởi các công cụ như Enterprise Manager. Nó truyền đạt rằng bạn đang tạo ra một ràng buộc khóa chính (trái ngược với một thuộc tính cột). Nó cũng cho phép bạn đặt tên cho ràng buộc. Cuối cùng, cả hai cách làm việc vì vậy tôi đoán đó là một vấn đề ưu tiên mà một trong những dễ đọc/duy trì. – Mayo

1

Nếu bạn đang sử dụng T-SQL, điều duy nhất xảy ra với mã của bạn là bạn sử dụng niềng răng {} thay vì ngoặc ().

PS: Cả hai IDENTITYPRIMARY KEY ngụ ý NOT NULL, vì vậy bạn có thể bỏ qua điều đó nếu bạn muốn.

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