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 解决方案就是您的解决方案。
我有一个存储过程并且 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 解决方案就是您的解决方案。