了解简单存储过程:将输出移动到变量

Ray*_*Ray 0 sql t-sql sql-server sql-server-2008

我希望我能帮助理解一个简单的存储过程.基本上,我想将select语句的输出存储在变量中,然后打印出变量的值.

我在这里找到了一个非常相似的问题: 简单的存储过程问题

代码如下:

CREATE PROCEDURE ReturnPrice 
   @carID int,
   @price decimal(18,2) output 
AS 
   SELECT 
      @price = Price 
   FROM 
      dbo.Cars 
   WHERE 
      CarID = @carID 
Run Code Online (Sandbox Code Playgroud)

我的问题是:我如何获得@carID的价值?

如果我试试这个:

declare @carOutput varchar(50)
exec carInformation, '@carOutput varchar(50) output',  @carOutput output
Run Code Online (Sandbox Code Playgroud)

我得到一个错误:

Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near ','.
Run Code Online (Sandbox Code Playgroud)

谢谢!

KM.*_*KM. 5

exec carInformation, '@carOutput varchar(50) output',  @carOutput output
                   ^bad

exec carInformation  '@carOutput varchar(50) output',  @carOutput output
                   ^good
Run Code Online (Sandbox Code Playgroud)

但也'@carOutput varchar(50) output'必须是一个int,但你传入一个字符串

您需要让调用应用程序已知道@carID的值,并且该过程使用该值来返回价格.

所以尝试类似的东西:

DECLARE @CarID_x int
       ,@Price_x decimal(18,2)

SET @CarID_x=123

EXEC ReturnPrice @CarID, @Price_x OUTPUT 
PRINT @Price_x
Run Code Online (Sandbox Code Playgroud)

要么

DECLARE @Price_x decimal(18,2)

EXEC ReturnPrice 123, @Price_x OUTPUT 
PRINT @Price_x
Run Code Online (Sandbox Code Playgroud)

两个代码示例以上将返回Price列值对于dbo.Cars具有行CarID的值123.

如果你不知道CarID那么运行:

SELECT 
      CarID, Price 
   FROM dbo.Cars 
Run Code Online (Sandbox Code Playgroud)

并且您将获得包含所有汽车的所有价格的结果集.