是否有一种在Insert语句中使用SQL Update的简单方法

时间:2015-09-16 13:15:00

标签: sql-server

我对sql查询相当新,所以请耐心等待。 我收到了这个Insert语句:

insert into Biztalk.Attestregler

SELECT 'A' AS STATUS
    , Anv
    , convert(VARCHAR(10), dateadd(day, @antalkorningar, (convert(DATETIME, Startdat))), 112) AS Startdate
    , Slutdate
    , Kstfrom
    , KSTtom
    , Projfrom
    , Projtom
    , Kontofrom
    , Kontotom
    , Amount
    , Ersattare
    , Eskalera
    , 0
FROM Agresso.Attestregler
WHERE rtrim(ltrim(Anv + '' + Startdate + '' + Slutdate + '' + Kstfrom + '' + KSTtom)) NOT IN (
        SELECT rtrim(ltrim(Anv + '' + Startdate + '' + Slutdate + '' + Kstfrom + '' + KSTtom))
        FROM Agresso.Attestregler_history
        )

UNION ALL

同时我想使用此新值更新Agresso.Attestregler中的Eskalera列:

convert(varchar(10),dateadd(day,@antalkorningar,(convert(datetime,Startdate))),112) 

在当前声明中有一种简单的方法吗?

提前完成,

1 个答案:

答案 0 :(得分:0)

请测试以下脚本吗? 我简化了表的字段,你需要修改下面的脚本 请注意,有一个SQL OUTPUT clause with INSERT statement 正在执行Insert命令时,一些插入的数据存储在临时表中。 所以你将数据插入两个表。然后我使用临时表数据来更新Eskalera的原始表

CREATE TABLE #temp (
Id int,Eskalera datetime
)
insert Into Biztalk.Attestregler(Id,STATUS,Kstfrom,KSTtom)
    output inserted.Id, getdate() into #temp (Id, Eskalera)
SELECT Id, 'A', Kstfrom, KSTtom
FROM Agresso.Attestregler
WHERE Id not in (SELECT Id FROM Agresso.Attestregler_history)

update Biztalk.Attestregler
set
    Eskalera = t.Eskalera
from Biztalk.Attestregler a
inner join #temp t on a.Id = t.Id