在SQL Server c中插入后更新触发器#

在SQL Server c中插入后更新触发器#,sql,sql-server,triggers,Sql,Sql Server,Triggers,以下是我一直坚持的情景: 用户将一本书插入到图书表中 Books Collection使用用户ID和BookCollection中插入的bookid进行更新 Userid是从c#应用程序中的字符串username传递的 bookcollection bookc_id, bookc_bookid, bookc_bookuser books bookid, title, author, year users userid, username, password bookid是bookc_boo

以下是我一直坚持的情景:

  • 用户将一本书插入到图书表中
  • Books Collection使用用户ID和BookCollection中插入的bookid进行更新
Userid是从c#应用程序中的字符串username传递的

bookcollection bookc_id, bookc_bookid, bookc_bookuser
books bookid, title, author, year
users userid, username, password
bookid是bookc_bookid的外键

userid是bookc_bookuser的外键

这就是如何将其插入到books表中的

INSERT INTO books (title, author, year) VALUES (@title, @author, @year);
在上一个表单中,我使用了内部连接子句,根据登录的用户名字符串从books集合中检索信息

 SELECT * FROM bookcollection c 
 INNER JOIN users r ON c.bookC_userid = r.userid 
 INNER JOIN books b ON c.bookC_bookID = b.bookid 
 WHERE username LIKE '" + Username + "'"

我如何创建一个触发器,用userid和bookid更新
books
表。
很简单,您可以这样创建一个更新触发器

CREATE TRIGGER yourtriggername
     ON yourtablename
     AFTER  INSERT
AS
BEGIN
 /* here goes your update statement*/
   UPDATE c
   SET c.bookC_userid = r.userid,
   b.bookC_bookID= b.bookid 
   FROM bookcollection c 
   INNER JOIN users r ON c.bookC_userid = r.userid 
   INNER JOIN books b ON c.bookC_bookID = b.bookid
   Where b.bookid = SCOPE_IDENTITY(); 
end 

Edit:您可以通过
Scope\u Identity
function

获取新插入的表id,谢谢您的回复这是什么意思`Where b.bookid=newlyinsertedbookid;`因为我没有刚出生的孩子怎么知道?另外,还有一个问题,在更新之后,我认为应该在INSERT之后,因为触发器应该在INSERT之后启动?抱歉,如果这些问题很愚蠢,请回答另一个问题,因为我的c#应用程序中有一个字符串,有什么方法可以包含在触发器中吗?因为从另一方面来说,无法知道是谁插入的it@1234566543:在触发器中,不能像存储过程那样直接传递参数。最好创建一个表,并将插入insert语句的人存储在其中,然后获取Trigger中的值当您更新其他内容时,是否应该引用插入的伪表以了解添加了哪些新行??使用
SCOPE\u IDENTITY
只能得到最后一个插入的标识值-但是
INSERT
可能已经插入了20行-当使用
SCOPE\u IDENTITY
时,您将如何处理
inserted
表中的所有20行????