使用sql / c#.net将值从一个表插入另一个表

时间:2011-05-05 10:43:54

标签: c# sql

我是SQL和C#的新手,目前正在尝试创建一个库软件。我面临一些问题,非常感谢您的意见。

我有三张桌子:

  • 图书(BookID, Title
  • 作者(AuthorID, AuthorFname, AuthorLname
  • WrittenBy(BookID, AuthorID
BookId中的

Books和表AuthorID中的Author被编入索引并且是主键。

我需要做的是,

  • 从书籍表中获取bookId
  • 从作者表中获取authorID,
  • 将这两个值插入到writeby表中

我的解决方案是编写两个单独的SQL语句来选择id列,然后将其输入到第三个表中。

但是,如果有两本同名书籍呢?

有没有办法在SQL中获取最后插入的值?

3 个答案:

答案 0 :(得分:1)

有多种方法可供选择:

 @@IDENTITY
      OR
 SCOPE_IDENTITY()
      OR
 IDENT_CURRENT(‘tablename’)

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

答案 1 :(得分:1)

如果这些ID列的类型为INT IDENTITY并且您正在使用SQL Server,那么是 - 您可以获取最后插入的值:

INSERT INTO dbo.Books(Title) VALUES('New Book')
DECLARE @NewBookID INT
SELECT @NewBookID = SCOPE_IDENTITY()

INSERT INTO dbo.Author(AuthorFname, AuthorLname) VALUES('John', 'Doe')
DECLARE @NewAuthorID INT
SELECT @NewAuthorID = SCOPE_IDENTITY()

INSERT INTO dbo.WrittenBy(BookID, AuthorID) VALUES(@NewBookID, @NewAuthorID)

SCOPE_IDENTITY()函数将返回前一个语句的最后一个插入的IDENTITY值,这应该是您正在寻找的,对吗?

答案 2 :(得分:0)

您应该有一个名为InsertedDate或CreatedDate的列。这是最后插入的最佳订购方式。

除此之外,这听起来像是一个家庭作业问题。这不是想要的 - 搜索引擎是你的朋友。