2008-12-08 37 views

Trả lời

27
CREATE TABLE [dbo].[Foo](
    [FooId] [int] IDENTITY(1,1) NOT NULL, 
    [BarId] [int] IDENTITY(1,1) NOT NULL 
) 

lợi nhuận

Msg 2744, Level 16, State 2, Line 1 
Multiple identity columns specified for table 'Foo'. Only one identity column per table is allowed. 

Vì vậy, không có, bạn có thể không có hai cột sắc. Tất nhiên bạn có thể làm cho khóa chính không tự động tăng (nhận dạng).

Edit: msdn:CREATE TABLE (Transact-SQL)CREATE TABLE (SQL Server 2000):

Chỉ có một cột sắc thể được tạo ra cho mỗi bảng.

+1

Tôi đã thử điều này nhưng thường có thể thay đổi cài đặt đó là lý do tôi hỏi câu hỏi. –

+0

Đó là thông số kỹ thuật. Xem liên kết được thêm vào msdn. –

0

trong máy chủ sql, không thể có nhiều cột làm nhận dạng.

1

Khóa chính không cần phải là cột nhận dạng.

Bạn không thể có hai cột Nhận dạng.

Bạn có thể nhận được một cái gì đó gần với những gì bạn muốn với một cò ...

+0

Đây là vấn đề. Khóa chính không cho phép giá trị null. Thông thường, các phím được tạo tự động được bỏ qua trên chèn. Ngay cả khi bạn sử dụng trình kích hoạt với INSTEAD OF INSERT để tạo khóa chính của bạn, nó sẽ bị lỗi (Được kiểm tra trên SQLSEVER2000) –

+1

@snmcdonald: Không sử dụng SQL Server 2000 trong năm 2011. – abatishchev

5

Thêm một cột sắc và sau đó thêm một cột tính có công thức là tên của cột sắc

Bây giờ cả hai sẽ tăng cùng lúc

3

Không có nó không thể có nhiều hơn một cột nhận dạng.

Trình quản lý doanh nghiệp thậm chí không cho phép bạn đặt> 1 cột làm nhận dạng. Khi cột thứ hai được tạo, hãy nhận dạng

Cũng lưu ý rằng @@ identity trả về giá trị nhận dạng cuối cùng cho kết nối mở sẽ vô nghĩa nếu có nhiều hơn một cột nhận dạng có thể cho một bảng.

2
create table #tblStudent 
(
    ID int primary key identity(1,1), 
    Number UNIQUEIDENTIFIER DEFAULT NEWID(), 
    Name nvarchar(50) 
) 

Hai cột nhận dạng là không thể, nhưng nếu bạn chấp nhận sử dụng cột nhận dạng duy nhất thì mã này cũng thực hiện công việc tương tự. Và bạn cũng cần thêm cột - Tên cột- để chèn các giá trị.

Ví dụ sử dụng:

insert into #tblStudent(Name) values('Ali') 

select * from #tblStudent 

Ps: NewID() chức năng tạo ra một giá trị duy nhất của kiểu uniqueidentifier.

0

Tôi vừa tạo mã sẽ cho phép bạn chèn hai danh tính trên cùng một bảng.hãy để tôi chia sẻ nó với bạn trong trường hợp nó giúp:

create trigger UpdateSecondTableIdentity 
On TableName For INSERT 
as 
update TableName 
set SecondIdentityColumn = [email protected]@IDENTITY 
where ForstId = @@IDENTITY; 

Cảm ơn,

16

Bạn có thể sử dụng trình tự cho cột thứ hai với giá trị mặc định nếu bạn sử dụng SQL Server 2012

--Create the Test schema 
CREATE SCHEMA Test ; 
GO 

-- Create a sequence 
CREATE SEQUENCE Test.SORT_ID_seq 
    START WITH 1 
    INCREMENT BY 1 ; 
GO 

-- Create a table 
CREATE TABLE Test.Foo 
    (PK_ID int IDENTITY (1,1) PRIMARY KEY, 
    SORT_ID int not null DEFAULT (NEXT VALUE FOR Test.SORT_ID_seq)); 
GO 

INSERT INTO Test.Foo VALUES (DEFAULT) 
INSERT INTO Test.Foo VALUES (DEFAULT) 
INSERT INTO Test.Foo VALUES (DEFAULT) 

SELECT * FROM Test.Foo 

-- Cleanup 
--DROP TABLE Test.Foo 
--DROP SEQUENCE Test.SORT_ID_seq 
--DROP SCHEMA Test 

http://technet.microsoft.com/en-us/library/ff878058.aspx

+0

Đề nghị tốt, chỉ có vấn đề là cắt ngắn bảng. – GoldBishop

+0

Tôi không chắc chắn rằng Truncation là một vấn đề, nếu bạn muốn [thiết lập lại trình tự] (https://msdn.microsoft.com/en-us/library/ff878572.aspx#code-snippet-7), bạn có thể dễ dàng làm điều đó – benkevich

+0

Có nhưng không giống như nhận dạng danh tính, bạn phải thả chuỗi và sau đó thêm lại hoặc xem lại và xác định lại bắt đầu cho chuỗi. Để phát triển và/hoặc thử nghiệm, Trình tự không phải là một triển khai lý tưởng. Một khi bạn vượt qua giai đoạn thử nghiệm/dev, nó là một thực thi hữu ích ồ ạt. Chỉ cần một PITA trong giai đoạn dev – GoldBishop

-1

Giải pháp thay thế là tạo một Trình kích hoạt INSERT để tăng bộ đếm.

Vì vậy, tôi có một bảng có một mã nhận diện: applicationstatusid. nó cũng là khóa chính. Tôi muốn tự động tăng thêm một số khác: applicationnumber

Vì vậy, đây là kích hoạt tôi viết.

create trigger [applicationstatus_insert] on [ApplicationStatus] after insert as 
     update [Applicationstatus] 
     set [Applicationstatus].applicationnumber =(applicationstatusid+ 4000000) 
     from [Applicationstatus] 
     inner join inserted on [applicationstatus].applicationstatusid = inserted.applicationstatusid 
+0

TẠO Trình tự dưới đây cho phép bạn tạo một giá trị mặc định tự động tăng. Trước năm 2012, bạn có thể sử dụng một hàm gia tăng một giá trị trong một bảng và trả về nó (tương tự như những gì bạn đã làm trong câu trả lời của bạn). Và đó có thể là giá trị mặc định cho một cột. Kích hoạt nên tránh. – TamusJRoyce

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