在SQL Server中参考表B中的最新记录更新表A中的列

时间:2013-11-22 02:24:38

标签: sql sql-server

我需要定期将新数据插入两个表中:

mstr_project,每次我插入一个项目记录(1行)。我有一个标识列Project_ID,因此每次插入新项目记录时,都会自动生成项目标识。

tbl_ProjectData,每次我为我添加到表mstr_project的新项目插入200行新数据。

我的问题是 - 如何每次更新ProjectID中的tbl_ProjectData列,以便其新记录采用表Project_ID中新生成的mstr_project?这意味着每次表tbl_ProjectData中的200条新记录都将采用表ProjectID中生成的相同mstr_project

1 个答案:

答案 0 :(得分:0)

只需使用Scope_Identity

DECLARE @ProjectID int;
INSERT dbo.mstr_project (Name) VALUES ('My New Project');
SET @ProjectID = Scope_Identity();

INSERT dbo.tbl_ProjectData (ProjectID, Value)
SELECT @ProjectID, Value
FROM #ProjectDataValues;

您还可以使用OUTPUT子句(SQL Server 2005及更高版本)捕获插入的值:

CREATE TABLE #NewProjectIDs (
   ProjectID int NOT NULL PRIMARY KEY CLUSTERED
);

INSERT dbo.mstr_project (Name)
OUTPUT ProjectID INTO #NewProjectIDs
SELECT 'My New Project';

INSERT dbo.tbl_ProjectData (ProjectID, Value)
SELECT N.ProjectID, V.Value
FROM
   #NewProjectIDs
   CROSS JOIN #ProjectDataValues V;

对于第二个代码段,请注意您向项目表中插入的行数 - 如果一次插入多个行,则必须执行不同的操作,以便为进入该行的每一行选择正确的项目。 ProjectData表。

注意:请停止使用“tbl_”作为前缀命名表。有一天,你会让别人免于你的谋杀梦想。