我需要定期将新数据插入两个表中:
表mstr_project
,每次我插入一个项目记录(1行)。我有一个标识列Project_ID
,因此每次插入新项目记录时,都会自动生成项目标识。
表tbl_ProjectData
,每次我为我添加到表mstr_project
的新项目插入200行新数据。
我的问题是 - 如何每次更新ProjectID
中的tbl_ProjectData
列,以便其新记录采用表Project_ID
中新生成的mstr_project
?这意味着每次表tbl_ProjectData
中的200条新记录都将采用表ProjectID
中生成的相同mstr_project
。
答案 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_”作为前缀命名表。有一天,你会让别人免于你的谋杀梦想。