0
我有以下(简化的)存储过程(其我不允许修改):捕获标量输出
CREATE PROCEDURE [dbo].[spDoSomething]
@someArg INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SomeID INT
-- some code which sets @SomeID --
SET @SomeID = 10
SELECT @SomeID AS SomeID
END
当从NHibernate的运行它,我看到分析器以下查询:
exec sp_executesql N'exec spDoSomething @p0',
N'@p0 INT',
@p0=1
NHibernate的莫名其妙能够检索SELECT
版@SomeID的价值。
如果我在MSSQL ManagementStudio中运行此脚本,我会看到选定的结果。
我试图使用与使用简单SQL查询的sp_executesql相同的OUTPUT方法。例如,当我运行如
exec sp_executesql N'INSERT INTO Users ... VALUES (...); select @UserId = SCOPE_IDENTITY()',
N'@UserId INT OUTPUT, ...',
@UserId OUTPUT, ...
那么SCOPE_IDENTITY()的结果存储在@UserId中。 但由于某种原因,相同的方法不适用于我的[spDoSomething]。如果我尝试以下操作:
DECLARE @ReturnedID INT
exec sp_executesql N'exec spDoSomething @p0',
N'@ReturnedID INT OUTPUT, @p0 INT',
@ReturnedID OUTPUT, @p0=1
SELECT @ReturnedID
然后我的@ReturnedID为NULL。
如何将@SomeID的值捕获到@ReturnedID中?