簡體   English   中英

遇到SQL-SERVER的Identity字段問題

[英]Having troubles with Identity field of SQL-SERVER

我正在做一個關於學校主題的學校項目,我需要為學生,班級,課程創建一些表...

我想在group_id中添加一個具有自動增量的確定類的組但是如果我更改任何這些屬性(Classes_id,courses_acronym,year_Semesters)我想要重置group_id變量如何在每次更改時重置它?

這是我的表:

CREATE TABLE Classes_Groups(
    Classes_id varchar(2),
    Group_id INT IDENTITY(1,1),
    courses_acronym varchar(4),
    year_Semesters varchar(5),
    FOREIGN KEY (Classes_id, year_Semesters,courses_acronym) REFERENCES Classes(id,year_Semesters, courses_acronym),
    PRIMARY KEY(Classes_id,courses_acronym,year_Semesters,Group_id)
);

通常,您不需要(需要)重置表的標識列。 標識列用於為表中的每個記錄創建唯一值

因此,您希望根據類表中的新條目在組表中生成條目。 您可以為此目的在類表上創建一個觸發器

由於Group_id本身已經是唯一的(因為它的IDENTITY),因此根本不需要主鍵中的其他字段。 相反,如果需要,可以為組合(Classes_id, courses_acronym, year_Semesters)創建單獨的UNIQUE約束。

如果類表的id字段也是IDENTITY列,則可以僅在該id字段中在classes表中定義主鍵。 然后,新組表中的外鍵約束只能包含該Classes_id字段。)

現在這么多。 我想你的數據庫設計需要一些額外的調整和調整。 ;)

你在哪里設置值?,你可以有一個存儲過程,並且在你的查詢中,當存儲過程被命中時,假定在開頭有值,則列具有初始值。然后使用IF語句。 聲明@initial_Classes_id varchar(2)= - 插入初始值聲明@initial_courses_acronym varchar(4)= - 插入初始值聲明@initial_year_Semesters varchar(5)= - 插入初始值

            declare @compare_Classes_id varchar(2) =  (select top 1 Classes_id from Classes_Groups order by --PK column desc for last insert); l would add Dateadded and then order with last insert date
            declare @compare_courses_acronym varchar(2) =  (select top 1 Classes_id from Classes_Groups where Classes_id = @compare_Classes_id); 
            declare @compare_year_Semesters varchar(2) =  (select top 1 Classes_id from Classes_Groups where Classes_id = @compare_Classes_id); 


            IF (@initial_Classes_id != @compare_Classes_id OR @initial_courses_acronym != @compare_courses_acronym OR @initial_year_Semesters != @compare_year_Semesters)
            BEGIN

            DBCC CHECKIDENT ('Group_id', RESEED, 1)
            Insert into Classes_Groups (courses_acronym,year_Semesters)
            values (
            courses_acronym,
            year_Semesters
            )

            END

            ELSE 

            BEGIN
            Insert into Classes_Groups (courses_acronym,year_Semesters)
            values (
            courses_acronym,
            year_Semesters
            )
            END

注意:建議在主鍵上使用int。 除非你有特定的目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM