如何在存储过程中存储值

时间:2017-08-08 01:55:53

标签: sql sql-server stored-procedures

我有一个如下所示的存储过程:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE Guests_Load
    @Id AS Varchar(30)  
AS
    SET NOCOUNT ON

    SELECT *
    FROM Guests
    WHERE HotelId = @Id

    SELECT 
        GroupId,
        HotelName,
    FROM 
        HotelView(NOLOCK)   
    WHERE 
        HotelId = @Id
GO

现在,我想通过编写另一个SELECT语句来创建一个新的结果集。

但是,我想要从第二个groupId返回的SELECT。我该怎么做呢?我试过了:

DECLARE @hotelId int;

SELECT 
    @hotelId = GroupId,
    HotelName,
FROM 
    HotelView(NOLOCK)   
WHERE 
    HotelId = @Id

但我收到错误

  

为变量赋值的SELECT语句不能与数据检索操作结合使用

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案就是运行两次查询:

CREATE PROCEDURE Guests_Load (
    @Id AS Varchar(30) 
) AS
BEGIN

    SET NOCOUNT ON;

    SELECT *
    FROM Guests
    WHERE HotelId = @Id;

    SELECT GroupId, HotelName
    FROM HotelView 
    WHERE HotelId = @Id;

    DECLARE @GroupId int;

    SELECT @GroupId = GroupId
    FROM HotelView
    WHERE HotelId = @Id;

END;

就个人而言,我不是打印表格的存储过程的粉丝。所以,我倾向于让所有SELECT仅使用变量。但是如果你想要打印输出,那么一种方法是运行代码两次。