Về cơ bản tôi muốn sử dụng uniqueidentifier theo cách tương tự như nhận dạng. Tôi không muốn chèn các giá trị vào nó, Nó chỉ nên chèn giá trị tự động, giá trị khác nhau cho mỗi hàng. Tôi không thể đặt tự động trên các cột của kiểu uniqueidentifier (thuộc tính 'autoincrement' được đặt thành false và không thể chỉnh sửa).Autoincrement uniqueidentifier
Trả lời
Hoặc thậm chí tốt hơn: sử dụng newsequentialid()
làm mặc định cho cột UNIQUEIDENITIFER của bạn. Điều đó sẽ cung cấp cho bạn một chuỗi phần tiếp theo của GUID.
CREATE TABLE dbo.YourTable
(SerialID UNIQUEIDENTIFIER
CONSTRAINT DF_SerialID DEFAULT newsequentialid(),
.... (other columns)......
)
Rắc rối là: newsequentialid là chỉ sẵn như là một cột mặc định - bạn không thể gọi nó như là một chức năng hoặc bất cứ điều gì. Nhưng điều đó dường như phù hợp với yêu cầu của bạn.
CẬP NHẬT: dường như có lỗi được xác nhận trong SQL Server Management Studio ngăn cản chỉ định newsequentialid()
làm mặc định cho cột trong trình thiết kế bảng tương tác.
Xem: http://social.msdn.microsoft.com/Forums/en-US/sqltools/thread/cad8a4d7-714f-44a2-adb0-569655ac66e6
Cách giải quyết: tạo bảng của bạn mà không chỉ định bất kỳ mặc định, và sau đó gõ vào câu lệnh T-SQL này ở cửa sổ truy vấn bình thường và chạy nó:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT DF_SerialID DEFAULT newsequentialid() FOR SerialID
Điều đó sẽ làm lừa!
Sử dụng NewID() làm giá trị mặc định. Ít nhất đây là những gì bạn sẽ làm cho SQL Server.
những thứ đó không chính xác ở bất kỳ đâu gần tuần tự/tự động tăng dần g, mặc dù ..... –
Tôi đã thử điều này nhưng có vẻ như luôn tạo ra cùng một định danh (cái này: "00000000-0000-0000-0000-000000000000"). Vì vậy, khi chèn hàng thứ hai tôi nhận được lỗi (buộc chèn khóa chính đã được sử dụng) – drasto
bạn nên đặt newId() trực tiếp trong định nghĩa bảng trong cơ sở dữ liệu của bạn! – MUG4N
Tôi đoán bạn có nghĩa là trong SQLServer và không C# ...
Đặt cột như PRIMARY KEY và ROWGUID
RowGuid http://img341.imageshack.us/img341/8867/sqlserverrowguid.png
chỉ cần đảm bảo ** KHÔNG ** sử dụng làm cho nó chỉ mục nhóm trên bảng !! –
Tại sao không? Tôi đang sử dụng nó trên một dự án và hoạt động tốt, mọi thứ trông bình thường, kiểm tra kế hoạch thực hiện, sắp xếp bảng, mọi thứ đều bình thường ... – BrunoLM
GUID như chỉ mục nhóm là khủng khiếp xấu: kiểm tra http: //www.sqlskills. com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEY-andor-the-clustering-key.aspx - chúng dẫn đến phân mảnh trang và chỉ mục lớn –
Tôi nghĩ
CREATE TABLE dbo.YourTable
(
SerialID UNIQUEIDENTIFIER PRIMARY KEY DEFAULT newsequentialid()
)
là đơn giản hơn
- 1. NewSequentialId trên UniqueIdentifier Clustered Index
- 2. SQL Azure Đặt lại autoincrement
- 3. uniqueidentifier DataType tương đương Trong C#
- 4. Đặt lại Autoincrement trong Android SQLite
- 5. ALTER bảng - thêm AUTOINCREMENT trong MySQL
- 6. Thiết SQLAlchemy autoincrement giá trị đầu
- 7. SQLite: autoincrement câu hỏi khóa chính
- 8. SQL Server 2005 UniqueIdentifier và C# Kiểu dữ liệu
- 9. Chuyển đổi từ UniqueIdentifier thành BigInt và Back?
- 10. Đặt lại AutoIncrement trong SQL Server sau khi xóa
- 11. SQLAlchemy Lấy khóa chính với Autoincrement trước khi Commit
- 12. Các trường AutoIncrement khác với Id trong grails
- 13. Đối phó với bản đồ cột SQLite autoincrement trong LINQtoSQL
- 14. id autoincrement/thi đua chuỗi với CassandraDB/MongoDB vv
- 15. Đặt giá trị khởi đầu cho cột với autoincrement
- 16. postgres autoincrement không cập nhật trên id rõ ràng chèn
- 17. AutoIncrement hoạt động như thế nào trong Sequelize của NodeJs?
- 18. Đặt giá trị bắt đầu cho AUTOINCREMENT trong SQLite
- 19. Không có autoincrement cho khóa chính Integer trong sqlite3
- 20. uniqueidentifier trong SQL trở thành trường hợp thấp hơn trong C#
- 21. Thay đổi kiểu dữ liệu của cột thành uniqueidentifier từ bigint
- 22. Tại sao tôi không thể vượt qua trong một uniqueidentifier/GUID để một stored procedure
- 23. Làm thế nào để kiểm tra xem một chuỗi là một uniqueidentifier?
- 24. Lấy hàng cuối cùng được chèn với Uniqueidentifier rằng nó không phải là IDENTITY
- 25. Làm thế nào tôi có thể làm cho một khóa chính như autoincrement
- 26. Làm cách nào để có được Dapper.Rainbow để chèn vào một bảng có AutoIncrement trên SQLite?
- 27. MySQL: # 1075 - Định nghĩa bảng không chính xác; autoincrement vs một khóa khác?
- 28. Làm thế nào để có được giá trị của autoincrement của hàng cuối cùng tại chèn
- 29. autoincrement Tiểu học trọng điểm trong Oracle cơ sở dữ liệu
- 30. Tại sao oracle không có tính năng autoincrement cho các khóa chính?
Đó không phải là rắc rối chút nào đối với tôi. Câu trả lời của bạn có vẻ là những gì tôi đang tìm kiếm. Tôi sẽ thử nó :) – drasto
Tôi đã nhận "Lỗi xác nhận mặc định cho Cột XY". Bạn có thể vui lòng kiểm soát mã của bạn (một lỗi đánh máy?)? – drasto
@drasto: Tôi đã chạy mã đó trên SQL Server 2008 R2 trước khi tôi đăng nó - nó hoạt động. * Phiên bản * của SQL Server nào bạn có ??? Tôi loại bỏ dấu ngoặc xung quanh newsequentialid() - có thể đó là một vấn đề? Hoạt động trên 2008R2 chắc chắn là –