如何从存储过程中的select语句为变量赋值?

时间:2018-09-03 02:41:36

标签: sql sql-server stored-procedures

我有此存储过程,出于调试目的,我想知道要返回什么值,为此,我创建了一个表并记录了从查询返回的值,但是我不确定如何获取loggin的select语句中的值。

我的存储过程(为演示而修改):

BEGIN
    DECLARE @SID INT 

    BEGIN TRY
        SELECT 
            SL.[Column1], SL.[Column2], SL.[Column3], 
            SMD.[Column4], SMD.[Column5]
            (some more logic)               

        BEGIN 
            DECLARE @ProcedureName6 NVARCHAR(168) = 'dbo.MYSP',
                    @ErrorMessage6 NVARCHAR(4000)

            SELECT @ErrorMessage6 = 'SID is:' +  CAST(@SID AS VARCHAR)

            EXEC [Log].[ErrorLoger] @ProcedureName6, @ErrorMessage6
        END
    END TRY
    BEGIN CATCH
        //Some Logic
    END CATCH
END

我实际上希望在SL.[Column2]中设置@SID进行记录。

1 个答案:

答案 0 :(得分:0)

如果查询有多个结果返回,则可以将结果插入到临时表中。从那里,从临时表中获取所需的值,然后执行ErorrLogger SP。

INSERT INTO #TEMP ( Column1, Column2, . . .)
SELECT SL.[Column1]
        ,SL.[Column2]
        ,SL.[Column3]
        ,SMD.[Column4]
        ,SMD.[Column5]
      (Some more logic)     

-- Get the value of @SID from temp table
SELECT @SID = Column2 FROM #TEMP

-- Return the result
SELECT  Column1, Column2, . . .
FROM    #TEMP

....
EXEC [Log].[ErrorLoger] @ProcedureName6
                       ,@ErrorMessage6

您还可以使用多个变量(每个变量用于一列)来保存查询结果。前提是查询仅返回单行