您可以使用三种方式:RETURN 值、OUTPUT 参数和结果集
另外,请注意您是否使用该模式:SELECT @Variable=column FROM table ...
如果查询返回多行,您的@Variable 将只包含查询返回的最后一行的值。
返回值
因为您的查询返回一个 int 字段,至少基于您命名它的方式。你可以使用这个技巧:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int
SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO
现在调用你的程序:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
这仅适用于 INT,因为 RETURN 只能返回单个 int 值,并且 null 会转换为零。
输出参数
您可以使用输出参数:
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
现在调用你的程序:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
输出参数只能返回一个值,但可以是任何数据类型
结果集
对于结果集,请执行以下过程:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
像这样使用它:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
结果集可以包含任意数据类型的多行多列