Sql server 3个表上的数据库完整性

Sql server 3个表上的数据库完整性,sql-server,join,primary-key,Sql Server,Join,Primary Key,我有三张桌子 Project:ProjectID(主键) Bugs:ProjectID,BugID(主键) bugglog:BugID,BugLogID(主键) 有: 一个项目上有多个bug 在这些bug上有多个bug日志 我如何插入一个有bug的项目,然后将bug记录到这些表中 谢谢连接与插入无关。联接仅在需要查询数据时起作用 如果声明性引用完整性就绪,则必须按以下顺序插入记录:项目,错误,错误日志 如果您在Microsoft SQL Server中工作,并且正在使用标识列,则在插入行

我有三张桌子

  • Project
    ProjectID
    (主键)
  • Bugs
    ProjectID,BugID
    (主键)
  • bugglog
    BugID,BugLogID
    (主键)
有:

  • 一个项目上有多个bug
  • 在这些bug上有多个bug日志
我如何插入一个有bug的项目,然后将bug记录到这些表中


谢谢

连接与插入无关。联接仅在需要查询数据时起作用

如果声明性引用完整性就绪,则必须按以下顺序插入记录:项目错误错误日志


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

联接与插入无关。联接仅在需要查询数据时起作用

如果声明性引用完整性就绪,则必须按以下顺序插入记录:项目错误错误日志


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

在这里,您需要编写单独的insert语句。联接仅在查询数据时使用

如果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,....)

在这里,您需要编写单独的insert语句。联接仅在查询数据时使用

如果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个包或3个过程来处理这些表中元素的插入/更新/删除;传入定义操作/数据的参数。如何在此处定义“有效”?通常插入将在单独的时间进行。因此,编写一个过程是没有意义的。我可能会编写1个包或3个过程来处理这些表中元素的插入/更新/删除;传入定义操作/数据的参数。对于项目Id,可以遵循相同的模式。对于项目Id,可以遵循相同的模式。