我有一张这样的表:
俱乐部表包含:ClubID(IDENTITY),姓名,地址
流派表包含:GenreID和流派
ClubGenre表包含俱乐部ID,GenreID
Club与Genre有一对多的关系
我创建了一个功能类似于数据库编辑器的应用程序。我有一组复选框包含在标有Genres的组框中。它包含Genre表中的类型。这不是数据包,我手动输入。我的添加/保存按钮出现问题。我基本上要做的就是这个
由于我的ClubID是IDENTITY,因此它会自动生成。我需要这个ClubID才能将数据插入我的ClubGenre表格。
假设选中标记为Pop的复选框1。在我的流派表中,它包含一条记录,即1作为genreID,Pop作为流派
这意味着我的insert语句将如下:
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,1)
现在,如果选中复选框1,3,5,它将类似于:
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,1)
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,3)
INSERT INTO Genre VALUES(*thenewlyaddedClubID*,5)
我已经找到了一个检索新添加的CLUB ID的解决方案,但还不能将它们全部放在一起。我正在考虑使用语句
将新的clubID放入隐藏的文本框中SELECT MAX(clubID) AS barid FROM club
答案 0 :(得分:0)
使用最高ID很容易出错!
您可以使用@@ IDENTITY检索最后插入的ID,可能更好,但SCOPE_IDENTITY会返回范围内的最后一个ID。
这是MSDN的一个例子:
USE AdventureWorks2008R2;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO
编辑:你真的想使用这个类型的复选框吗?为什么不使用带有流派的组合框和一个添加按钮,将clubID和GenreID放入一个单独的帮助表中,以便以后可以在不改变界面的情况下添加流派...只需说明
答案 1 :(得分:0)
使用MAX(clubID)是不安全的(我们无法确定数据库如何生成ID)。最好根据其他值(名称和地址)获取新ID。
所以你可以这样做:
Sub Add()
'' // Do the insert to club table here
'' // Get the new clubID:
Dim sql As String = "SELECT clubID FROM Club WHERE Name='{0}' AND Address='{1}'"
Dim clubId As Integer = ''RunTheSQl...(String.Format(sql, Name.Text , Address.Text)
If Genre1.Checked Then
sql = "INSERT INTO ClubGenre VALUES({0}, 1)"
''...RunTheSql...(String.Format(sql, clubId)
End If
End Sub