簡體   English   中英

每當插入新記錄時,如何將列值復制到同一數據庫表的其他列?

[英]How to copy a column value to other column of same database table whenever a new record is inserted?

我有以下數據庫表:

Book {Id(primary Key), Name, TotalNoOfCopies, NoOfCopiesAvailable}

我希望每當插入新記錄/行時,列NoOfCopiesAvailabe包含的值與列TotalToOfCopies中的值相同。
我嘗試使用以下成功觸發器:

for insert
as declare @id nvarchar(10),@name varchar(50),@author varchar(40),@totalNoOfCopies tinyint, @availableNoOfCOpies tinyint;
select @id=i.Id from inserted i;
select @name=i.Name from inserted i;
select @author=i.Author from inserted i;
select @totalNoOfCopies=i.TotalNoOfCopies from inserted i;
select @availableNoOfCopies=i.TotalNoOfCopies from inserted i;
delete from Book where Id=@id;
insert into Book values(@id,@name,@author,@totalNoOfCopies,@availableNoOfCOpies);

但它執行3筆交易:
1.用於插入新記錄
2.用於刪除該新記錄
3.用於插入具有NoOfCopiesAvailable = TotalNoOfCopies的新記錄

例如:

Insert into Book values('123','Book','Author',5,null)

訊息:
受影響1行
受影響1行
受影響1行


我想知道單筆交易中是否有任何辦法?

您是否需要INSTEAD OF INSERT觸發器:

CREATE TRIGGER Book_i ON Book
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO Book (
        Id,
        Name,
        TotalNoOfCopies, 
        NoOfCopiesAvailable
    ) SELECT
        Id,
        Name,
        TotalNoOfCopies,
        TotalNoOfCopies
    ) FROM
        INSERTED
END
GO

顯然是優雅的。

我寧願修復表設計,而改用NumberOfCopiesSold,默認情況下可以為0。

暫無
暫無

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

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