【发布时间】:2017-04-27 15:24:48
【问题描述】:
我正在 SQL Server 2012 上的 TSQL 中处理存储过程。当我调用存储过程时。我的问题:我将值插入到表 Projects 中,并希望将导入表中的 inserted.ProjectId 和 oID 一起存储到临时表中;我不会将导入表中的oID 存储到Projects 表中。
我指的是这个答案: Insert Into... Merge... Select (SQL Server)
1) 导入表:我正在将一个表从 C# 发送到 SQL,其中包含以下值:
oID | Title |
----+----------+
0 | ProjectX |
1 | ProjectY |
2 | ProjectZ |
在存储过程中是这样的:
CREATE TYPE [MySchema].[Project] AS TABLE
(
oID INT,
Title VARCHAR(100)
);
@ImportProjects MySchema.Project READONLY
2) Projects Table:我正在将值插入到 Table Projects 中,并希望将插入的 ProjectId 以及导入表中的 oID 存储到临时表中: p>
ProjectId | Title |
----------+----------+
33 | ProjectX |
34 | ProjectY |
35 | ProjectZ |
3) Desired Output, Temporary Table:在我的临时表中,我想存储 ProjectId 以及导入表中的 oID:
RowID | oID | ProjectId |
--------+-----+--------------+
1 | 0 | 33 |
2 | 1 | 34 |
3 | 2 | 35 |
我的合并查询如下所示:
create table Temp (ProjectId INT, oID INT)
MERGE INTO Temp USING
(
SELECT
a.oID as oID,
b.ProjectId as ProjectId
FROM @ImportProjects a
CROSS JOIN Projects b
) AS s ON 1 = 0
WHEN NOT MATCHED THEN
INSERT (oID, ProjectId)
VALUES (s.oID, s.ProjectId)
OUTPUT Inserted.ProjectId, s.oID
INTO Temp(oID, ProjectId);
这真的不起作用...我的问题之一当然是交叉连接,但我在导入表和项目表之间没有链接或外键...
你知道如何实现吗?
谢谢!! :)
【问题讨论】:
-
是
Project.Titleunique? -
不幸的是……这只是一个简单的 varchar(100)
-
您的
Project表中是否有一组列唯一标识ProjectId以外的行? -
在我的项目表中,我只有主键 ProjectId ProjectId INT IDENTITY(1,1)
标签: sql sql-server tsql