Tôi cần có một cột làm khóa chính và một cột khác để tự động tăng trường số thứ tự. Điều này có thể không?Bảng máy chủ sql có thể có hai cột nhận dạng không?
EDIT: Tôi nghĩ tôi sẽ chỉ sử dụng số tổng hợp làm số thứ tự. Dù sao cũng cảm ơn.
Tôi cần có một cột làm khóa chính và một cột khác để tự động tăng trường số thứ tự. Điều này có thể không?Bảng máy chủ sql có thể có hai cột nhận dạng không?
EDIT: Tôi nghĩ tôi sẽ chỉ sử dụng số tổng hợp làm số thứ tự. Dù sao cũng cảm ơn.
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) và CREATE TABLE (SQL Server 2000):
Chỉ có một cột sắc thể được tạo ra cho mỗi bảng.
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. –
Đó là thông số kỹ thuật. Xem liên kết được thêm vào msdn. –
trong máy chủ sql, không thể có nhiều cột làm nhận dạng.
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ò ...
Đâ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) –
@snmcdonald: Không sử dụng SQL Server 2000 trong năm 2011. – abatishchev
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
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.
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.
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,
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
Đề nghị tốt, chỉ có vấn đề là cắt ngắn bảng. – GoldBishop
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
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
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
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
Bạn đang sử dụng phiên bản SQL Server nào? –