【问题标题】:Grab all inserted or updated product ids from an inline sql?从内联 sql 中获取所有插入或更新的产品 ID?
【发布时间】:2013-09-09 21:44:59
【问题描述】:

我有两个 Store 过程,

ALTER PROCEDURE [dbo].[UpdateProduct] 
(
    @ID  VARCHAR(10) OUTPUT,
    ..........................................
    ..........................................
    ..........................................


ALTER PROCEDURE [dbo].[InsertProduct] 
(
    @ID  VARCHAR(10) OUTPUT,
    ..........................................
    ..........................................
    ..........................................

我有一个动态 SQL 调用这 2 个 sps,

Exec InsertProduct 
Exec UpdateProduct 
Exec UpdateProduct
Exec InsertProduct
Exec InsertProduct
Exec UpdateProduct
Exec InsertProduct
..........................................
..........................................
..........................................
..........................................

问题是我需要以相同的顺序在我的动态内联 sql 的最后一个中获取所有插入和更新的 id。所以,让我在我的@Sqls varchar 变量中以逗号分隔。这可能吗?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008-r2


    【解决方案1】:

    你可以改变你的动态 SQL

    declare @ID varchar(10)
    
    exec InsertProduct @ID = @ID output
    
    select @Sqls = @Sqls + 'inserted ' + isnull(@ID, 'null')
    
    exec UpdateProduct @ID = @ID output
    
    select @Sqls = @Sqls + 'updated' + isnull(@ID, 'null')
    ...
    

    然后像调用你的动态 SQL 一样

    exec sp_executesql
        @stmt = <your statement>,
        @params = N'@Sqls nvarchar(max) = null output',
        @Sqls = @Sqls output
    

    【讨论】:

      【解决方案2】:

      你可以使用魔法表

      向您的查询插入 OUTPUT 和 OUTPUT 更新子句 Using OUTPUT after INSERT to get value of identity column into a (non-table value) variable

      【讨论】:

        猜你喜欢
        • 2017-09-25
        • 1970-01-01
        • 2015-01-03
        • 2016-04-25
        • 1970-01-01
        • 2017-04-01
        • 2017-09-20
        • 2019-11-07
        • 1970-01-01
        相关资源
        最近更新 更多