gpt4 book ai didi

tsql - T-SQL 获取存储过程的 SELECTed 值

转载 作者:行者123 更新时间:2023-12-03 04:57:18 27 4
gpt4 key购买 nike

在 T-SQL 中,这是允许的:

DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

因此,可以获取 SELECT 的值并将其填充到变量中(显然,前提是它是标量)。

如果我将相同的选择逻辑放入存储过程中:

CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

我可以获取此存储过程的输出并将其填充到变量中吗?

类似于:

DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt

(我知道上面的语法是不允许的,因为我尝试过!)

最佳答案

您可以使用三种方式: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

结果集可以包含任意数据类型的多行和多列

关于tsql - T-SQL 获取存储过程的 SELECTed 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com