在SQL Server更新查询后插入

约翰·欧文

我有一个存储在存储过程中的更新查询。

我想在执行存储过程后立即插入更新的查询。这是我的存储过程。

ALTER PROCEDURE [dbo].[sp_assign_account]
    @id_agency int,
    @month nvarchar(2),
    @regional nvarchar(20),
    @top int,
    @assigned_by nvarchar(20)
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [AMAS].[dbo].[tbl_sample] 
    SET id_agency = @id_agency, 
        status = 'assigned', 
        stage = 'STA', 
        tgl_assign = GETDATE(), 
        assigned_by = @assigned_by  
    WHERE id_sample IN (SELECT  TOP (@top) a.id_sample 
                        FROM [AMAS].[dbo].[tbl_sample] a
                        LEFT JOIN mysystem.lapkeu.dbo.groupbranch b ON a.branch_id = b.BranchID
                        WHERE a.is_delete = '0' 
                          AND a.status = 'not assigned' 
                          AND a.stage = 'AMA' 
                          AND MONTH(a.insert_at) = @month
                          AND a.branch_id IN (SELECT branch_id 
                                              FROM mysystem.lapkeu.dbo.groupbranch 
                                              WHERE GroupBranchID IN (SELECT b.group_branch_id 
                                                                      FROM [AMAS].[dbo].[tbl_collector_agency] a
                                                                      JOIN [AMAS].[dbo].[tbl_area_collector] b ON a.id_collector = b.id_collector
                                                                      WHERE a.id_agency = @id_agency)
        ) 
        ORDER BY NEWID()
    )

    // can i put insert query here??
END

还是可以获取更新的ID?因为我使用随机数据进行更新,所以在更新之前不初始化ID。

您可以使用Output clause@Dale K的注释来实现

DECLARE @Updated table(id_agency int, .. // Any property as you want)

UPDATE [AMAS].[dbo].[tbl_sample] SET id_agency = @id_agency, status = 'assigned', stage='STA', tgl_assign = getdate(), assigned_by = @assigned_by  
OUTPUT deleted.id_agency // Any property as you want
INTO @Updated
WHERE id_sample 
IN (////)

SELECT * FROM @Updated

@Updated结果中,您可以DoSomething的,如你所愿:InsertSelect,等。

阅读以下教程以更好地理解。

https://www.sqlservercentral.com/articles/the-output-clause-for-update-statements

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server:触发后插入,更新

来自分类Dev

SQL Server插入查询

来自分类Dev

SQL Server:合并(插入/更新)后的非聚集索引

来自分类Dev

插入更新和删除后的 SQL Server 触发器

来自分类Dev

插入或更新或删除后刷新datagridview而不选择新的sql查询

来自分类Dev

如何在Sql Server 2008中的一个MERGE查询中更新,插入,删除?

来自分类Dev

插入和更新后未触发SQL Server触发器

来自分类Dev

插入和更新后未触发SQL Server触发器

来自分类Dev

选择插入中的SQL Server子查询

来自分类Dev

加快SQL Server 2008插入查询的速度

来自分类Dev

在SQL Server中的查询中插入数据

来自分类Dev

选择行并插入查询-SQL Server

来自分类Dev

查询按日期时间排序后如何更新SQL Server表

来自分类Dev

插入/更新海量记录SQL Server

来自分类Dev

SQL Server表中的并行插入/更新

来自分类Dev

在SQL Server中插入更新数据帮助

来自分类Dev

在SQL Server中使用DataTable插入或更新

来自分类Dev

SQL Server表中的并行插入/更新

来自分类Dev

使用 SQL Server 插入/更新死锁

来自分类Dev

MS SQL Server查询后返回JSON

来自分类Dev

MS SQL Server查询后返回JSON

来自分类Dev

在C#,SQL Server中执行查询时出错:尝试更新是否已存在值,否则插入

来自分类Dev

在php中插入sql查询后如何显示正确的消息?

来自分类Dev

递归查询中的SQL Server更新

来自分类Dev

SQL Server更新查询中的if条件

来自分类Dev

SQL Server更新查询非常慢

来自分类Dev

查询:如果条件在SQL Server更新

来自分类Dev

sql server查询更新行是2的倍数

来自分类Dev

从 WHERE 更新子查询 SQL Server