3个表上的数据库完整性

时间:2013-05-08 12:25:38

标签: sql-server join primary-key

我有3张桌子

  • ProjectProjectID(主键)
  • BugsProjectID, BugID(主键)
  • BugLogsBugID, BugLogID(主键)

有:

  • 项目中的多个错误
  • 错误的多个错误日志

我如何插入一个有bug的项目然后bug将bug有效地记录到这些表中?

谢谢

2 个答案:

答案 0 :(得分:3)

那么你需要编写单独的插入语句。只有在查询数据时才会使用联接。

如果bugid是标识列,您可以执行以下操作:

DECLARE @bugid bigint
INSERT INTO Bugs (Projectid,other COLUMNS...)
VALUES (values1,VALUES....)

SELECT @bugid= SCOPE_IDENTITY()

INSERT INTO BugLogs(Bugid,other COLUMNS...)
VALUES(@bugid,....)

或者,您可以使用Output子句来获取bugid。这适用于所有情况:

DECLARE @bugid bigint
INSERT INTO Bugs (Projectid,other COLUMNS...)
OUTPUT INSERTED.BugId INTO @bugid
VALUES (values1,VALUES....)

INSERT INTO BugLogs(Bugid,other COLUMNS...)
VALUES(@bugid,....)

答案 1 :(得分:2)

联接与插入无关。只有在您想要查询数据时才能使用联接。

如果您具有声明性参照完整性,那么您将必须按以下顺序插入记录:项目错误 BugLogs < /强>

如果您使用的是Microsoft SQL Server,并且正在使用标识列,则在插入行之后,可以使用scope_identity()函数检索分配的主键,并使用它来设置外键。