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中?