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

时间:2011-06-24 17:18:18

标签: sql sql-server tsql sql-server-2008

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

我在这里发现了一个非常相似的问题: Simple Stored Procedure Question

代码如下:

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

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

如果我试试这个:

declare @carOutput varchar(50)
exec carInformation, '@carOutput varchar(50) output',  @carOutput output

我收到错误:

Msg 170, Level 15, State 1, Line 3
Line 3: Incorrect syntax near ','.

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

'@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

DECLARE @Price_x decimal(18,2)

EXEC ReturnPrice 123, @Price_x OUTPUT 
PRINT @Price_x

上面的两个代码示例都会返回Price行的dbo.Cars列的值CarID

如果您不知道123,请运行:

CarID

您将获得一个包含所有汽车价格的结果集。