Dav*_*vid 93 t-sql select stored-procedures
在T-SQL中,这是允许的:
DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
Run Code Online (Sandbox Code Playgroud)
因此,有可能获得SELECT的值并将其填充到变量中(显然它是标量).
如果我在存储过程中放入相同的选择逻辑:
CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1
Run Code Online (Sandbox Code Playgroud)
我可以获取此存储过程的输出并将其填充到变量中吗?
就像是:
DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt
Run Code Online (Sandbox Code Playgroud)
(我知道上面的语法是不允许的,因为我试过了!)
KM.*_*KM. 188
您可以使用三种方法: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
Run Code Online (Sandbox Code Playgroud)
现在称你的程序如下:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue
Run Code Online (Sandbox Code Playgroud)
这只适用于INT,因为RETURN只返回一个int值,而null则转换为零.
OUTPUT PARAMETER
您可以使用输出参数:
CREATE PROCEDURE GetMyInt
( @Param int
,@OutValue int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
Run Code Online (Sandbox Code Playgroud)
现在称你的程序如下:
DECLARE @SelectedValue int
,@Param int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue
Run Code Online (Sandbox Code Playgroud)
输出参数只能返回一个值,但可以是任何数据类型
结果 集的RESULT SET使程序如下:
CREATE PROCEDURE GetMyInt
( @Param int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO
Run Code Online (Sandbox Code Playgroud)
使用它像:
DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
EXEC GetMyInt @Param
SELECT * FROM @ResultSet
Run Code Online (Sandbox Code Playgroud)
结果集可以包含许多行和任何数据类型的多列