从另一个执行一个存储过程会抛出错误

时间:2014-08-26 06:24:33

标签: sql-server tsql stored-procedures

我的存储过程就像这样

       SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    create  PROCEDURE ph_GetAllStaffAddressByCamp
        @Year INT,
        @strYear VARCHAR(2) OUTPUT
    AS

    IF NULLIF(@Year, '') IS NULL
        SET @Year = Exec [cs_GetCurrentYear]  @strYear 
    SELECT DISTINCT [VolID], [CampID], [VolFName] FROM [vStaffJobAndCamp]
 where  CampCode Like @Year 

正如您所看到的,我正在尝试在此过程中执行[cs_GetCurrentYear](添加了以下过程)

    ALTER PROCEDURE [dbo].[cs_GetCurrentYear]
    @strYear VARCHAR(2) OUTPUT
AS
    SELECT @strYear = Year FROM tblCurrentYear

但这会在编译时抛出错误。 它看起来像这样

    Msg 156, Level 15, State 1, Procedure ph_GetAllStaffAddressByCamp, Line 8
Incorrect syntax near the keyword 'Exec'.

2 个答案:

答案 0 :(得分:1)

您可以将第二个存储过程修改为存储的函数,并从第一个存储过程中调用它。在此处阅读更多内容:How to call a scalar function in a stored procedure

答案 1 :(得分:1)

您可以创建一个表格,并在其中插入SP的结果。尝试

DECLARE  @TheYear TABLE
(

TheYear Varchar(2)

)

 INSERT INTO @theYear (TheYear)
  Exec [cs_GetCurrentYear]  @strYear 

   SET @Year = (SELECT TOP(1) TheYear FROM  @TheYear)