临时表:
target_compile_options ( <lib> PUBLIC -m32 )
set_target_properties ( <target> PROPERTIES LINK_FLAGS -m32 )
target_link_libraries ( <target> PRIVATE <lib> )
数据库表:declare @Temp_Table table
(
newSID int,
oldSID int
)
Solutions
插入后,
Solutions:
* 1 solution1 111
* 2 solution2 111
* 3 solution3 111
预期的温度表
* 1 solution1 111
* 2 solution2 111
* 3 solution3 111
* 4 solution1 222
* 5 solution2 222
* 6 solution3 222
此表具有 oldsID NewSID
* 1 4
* 2 5
* 3 6
(身份),SID
和cnumber。
现在,我想从SName
表中选择一些行,并将其值插入同一表中。
插入每一行时,我想将旧标识值和新标识值存储在临时表(Solutions
)中。
请帮助我。
答案 0 :(得分:1)
诀窍是使用merge
而不是常规的insert into..select
,因为使用merge
可以在output
子句中使用源和目标中的数据。
首先,创建并填充示例表(请在您将来的问题中为我们保存此步骤):
CREATE TABLE Solutions
(
SolutionID int identity (1,1),
SolutionName varchar(10),
ClientNumber int
)
INSERT INTO Solutions (SolutionName, ClientNumber) VALUES
('solution1', 111),
('solution2', 111),
('solution3', 111)
然后,声明映射表:
DECLARE @Temp_MasterSolutionsTable AS TABLE
(
newSolutionID int,
oldSolutionID int
)
下一步,复制所需的记录:
MERGE INTO Solutions USING
(
SELECT SolutionID, SolutionName, ClientNumber
FROM Solutions
--WHERE CONDITION -- I'm guessing you will need a where clause here
) AS s ON 1 = 0 -- Always not matched
WHEN NOT MATCHED THEN
INSERT (SolutionName, ClientNumber)
VALUES (s.SolutionName, s.ClientNumber)
-- and here is where the magic happens
OUTPUT Inserted.SolutionID, s.SolutionID
INTO @Temp_MasterSolutionsTable (newSolutionID, oldSolutionID);