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日志
谢谢连接与插入无关。联接仅在需要查询数据时起作用 如果声明性引用完整性就绪,则必须按以下顺序插入记录:项目,错误,错误日志
如果您在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,可以遵循相同的模式。