1

我有两个 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 变量中以逗号分隔。这是可能的吗?

4

2 回答 2

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
于 2013-09-09T13:41:47.167 回答
1

你可以使用魔术桌

在查询中使用 OUTPUT 插入和 OUTPUT 更新子句 在 INSERT 之后使用 OUTPUT 将标识列的值放入(非表值)变量中

于 2013-09-09T13:43:34.403 回答