在SQL Server中,参考表B中的最新记录更新表a中的列
我需要定期在两个表中插入新数据: 表在SQL Server中,参考表B中的最新记录更新表a中的列,sql,sql-server,Sql,Sql Server,我需要定期在两个表中插入新数据: 表mstr\u project,其中每次我插入一条项目记录(1行)。我有一个标识列Project\u ID,因此每次插入新的项目记录时,都会自动生成一个项目ID 表tbl_ProjectData,其中每次我为新项目插入200行新数据时,我都会添加到表mstr_project 我的问题是-如何每次更新tbl_ProjectData中的projectd列,以便其新记录采用表mstr_Project中新生成的ProjectID?这意味着每次,表tbl_ProjectD
mstr\u project
,其中每次我插入一条项目记录(1行)。我有一个标识列Project\u ID
,因此每次插入新的项目记录时,都会自动生成一个项目ID
表tbl_ProjectData
,其中每次我为新项目插入200行新数据时,我都会添加到表mstr_project
我的问题是-如何每次更新
tbl_ProjectData
中的projectd
列,以便其新记录采用表mstr_Project
中新生成的ProjectID
?这意味着每次,表tbl_ProjectData
中的200条新记录都将采用表mstr_project
中生成的相同ProjectID
只需使用Scope\u 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及更高版本)捕获插入的值:
对于第二个代码段,请注意插入到项目表中的行数——如果一次插入多行,则必须执行不同的操作,以便为进入ProjectData
表的每一行选择正确的项目
注意:请停止使用“tbl_u2;”作为前缀命名表。总有一天你会让别人从关于你的恶梦中解脱出来
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;