【问题标题】:inserting values from one table into another table using sql/c#.net使用 sql/c#.net 将一个表中的值插入到另一个表中
【发布时间】:2011-05-05 10:43:54
【问题描述】:

我是 SQL 和 C# 的新手,目前正在尝试创建一个库软件。我遇到了一些问题,希望您能提供意见。

我有三张桌子:

  • 书籍 (BookID, Title)
  • 作者 (AuthorID, AuthorFname, AuthorLname)
  • 作者 (BookID, AuthorID)

Books 表中的BookIdAuthor 表中的AuthorID 被索引并且是主键。

我需要做的是,

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

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

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

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

【问题讨论】:

  • 你将如何确定哪个 bookid 应该与哪个 authorid 链接?
  • 用户将在表单中输入这些详细信息。所以从中获取的数据会让我知道哪个 bookid 将属于哪个 authorid。但是在检索数据时,写的表会让我知道哪个作者写了哪本书

标签: c# sql


【解决方案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】:

有多种方式可供选择:

 @@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/

【讨论】:

  • 谢谢。该链接非常有用!这就是我要找的。​​span>
【解决方案3】:

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

除此之外,这听起来像是一道作业题。这不希望 SO 是为了 - 搜索引擎是你的朋友。

【讨论】:

  • 我向你保证,这是我遇到的一个实际问题,也是我写的一个实际问题。这不是作业问题。在这个项目中,我正在学习 sql 和 c#。
猜你喜欢
  • 2010-10-09
  • 2012-03-06
  • 2020-11-25
  • 2015-07-02
  • 2021-11-17
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多