Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 捕获不使用输出参数且不返回结果的存储过程的标量输出_Sql Server_Stored Procedures_Output - Fatal编程技术网

Sql server 捕获不使用输出参数且不返回结果的存储过程的标量输出

Sql server 捕获不使用输出参数且不返回结果的存储过程的标量输出,sql-server,stored-procedures,output,Sql Server,Stored Procedures,Output,我有以下不允许修改的简化存储过程: 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运行时,我在profiler中看

我有以下不允许修改的简化存储过程:

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运行时,我在profiler中看到以下查询:

exec sp_executesql N'exec spDoSomething @p0',
N'@p0 INT',
@p0=1
NHibernate能够以某种方式检索所选@SomeID的值

如果在MSSQL ManagementStudio中运行此脚本,则会看到所选结果

我尝试使用与sp_executesql相同的输出方法来处理简单的SQL查询。例如,当我运行类似

exec sp_executesql N'INSERT INTO Users ... VALUES (...); select @UserId = SCOPE_IDENTITY()',
N'@UserId INT OUTPUT, ...',
@UserId OUTPUT, ...
然后,SCOPE_IDENTITY的结果存储在@UserId中。 但出于某种原因,相同的方法不适用于我的[SpdoMething]。如果我尝试以下方法:

DECLARE @ReturnedID INT

exec sp_executesql N'exec spDoSomething @p0',
N'@ReturnedID INT OUTPUT, @p0 INT',
@ReturnedID OUTPUT, @p0=1

SELECT @ReturnedID
那么我的@ReturnedID是空的


如何将@SomeID的值捕获到@ReturneId中?

由于无法更改SP,因此可以使用insert…exec

或者出于某种原因需要使用sp_executesql

declare @returnedID int

exec sp_ExecuteSQl 
    N'declare @t table (result int);insert @t (result ) exec spDoSomething; select @returnedID = result from @t',
    N'@returnedID int output',
    @returnedID output

select @returnedID
declare @returnedID int

exec sp_ExecuteSQl 
    N'declare @t table (result int);insert @t (result ) exec spDoSomething; select @returnedID = result from @t',
    N'@returnedID int output',
    @returnedID output

select @returnedID