SQL - 存储过程 - 从子查询中获取值

SQL - Stored Procedures - get values from subquery

我有一个存储过程并且 EXEC 调用如下:

EXEC Schedule_InsertReservations 
     @ScheduleID = (SELECT ScheduleID FROM Schedule WHERE Job_No = 'ABC'),
     @ScheduleTaskID = (SELECT ScheduleTaskID FROM ScheduleTasks WHERE (ScheduleID = (SELECT ScheduleID FROM Schedule WHERE Job_No = 'ABC')) AND LibraryTaskID = 247),
     @ResourceID = (SELECT Vendor_ID FROM tblVendors WHERE Vendor_Name = 'Blue Line Taxi')

我正在尝试使用子查询为存储过程设置值,但是当我 运行 它时出现这些错误:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '('.

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.

我不能在存储过程中使用子查询吗?

为什么你不能 DECLARE 三个 variables 并将其用作程序的 parameter

DECLARE @sch_id     INT,--change the datatype based on your schema.
        @Vendor_ID  INT,
        @Sch_TaskID INT

SELECT @sch_id = ScheduleID
FROM   Schedule
WHERE  Job_No = 'ABC'

SELECT @Sch_TaskID = ScheduleTaskID
FROM   ScheduleTasks ST
       INNER JOIN Schedule S
               ON St.ScheduleID = s.ScheduleID
WHERE  s.Job_No = 'ABC'
       AND s.LibraryTaskID = 247 

SELECT @Vendor_ID = Vendor_ID
FROM   tblVendors
WHERE  Vendor_Name = 'Blue Line Taxi'

EXEC Schedule_insertreservations
  @ScheduleID = @sch_id,
  @ScheduleTaskID = @Sch_TaskID,
  @ResourceID = @Vendor_ID 

Execute a stored procedure or function

[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

value
Is the value of the parameter to pass to the module or pass-through command. If parameter names are not specified, parameter values must be supplied in the order defined in the module.
...
If the value of a parameter is an object name, character string, or qualified by a database name or schema name, the whole name must be enclosed in single quotation marks. If the value of a parameter is a keyword, the keyword must be enclosed in double quotation marks.

我认为可以只是对象的名称或关键字。而且你不能那样设置参数。

@FireBlade 解决方案就是您的解决方案。