代码之家  ›  专栏  ›  技术社区  ›  Imran Qadir Baksh - Baloch

从内联sql中获取所有插入或更新的产品id?

  •  1
  • Imran Qadir Baksh - Baloch  · 技术社区  · 11 年前

    我有两个存储过程,

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

    并且我有一个动态SQL,它调用这两个sps,

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

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   roman    11 年前

    您可以更改动态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
  •  1
  •   Community CDub    8 年前

    你可以使用魔术桌

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