首页 文章

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

提问于
浏览
1

我有一个存储过程和 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')

我试图使用子查询设置存储过程的值,但我运行时遇到这些错误:

消息102,级别15,状态1,行1''' . 消息102,级别15,状态1,行1附近的语法不正确',' . 消息102,级别15,状态1,行1语法不正确靠近',' .

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

2 回答

  • 4

    为什么你不能 DECLAREvariables 并将其用作程序的 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
    
  • 0

    执行存储过程或函数[{EXEC |执行 } ]
    {
    [@return_status =]
    {module_name [; number] | @module_name_var}
    [[@parameter =] {值
    | @variable [OUTPUT]
    | [默认]
    }
    ]
    [,...... n]
    [WITH RECOMPILE]
    }
    [;]
    value是要传递给模块或传递命令的参数的值 . 如果未指定参数名称,则必须按模块中定义的顺序提供参数值 . ...如果参数的值是对象名,字符串或由数据库名称或模式名称限定,则必须将整个名称括在单引号中 . 如果参数的值是关键字,则关键字必须用双引号括起来 .

    我认为值可以只是对象或关键字的名称 . 而且你不能以这种方式设置参数 .

    @FireBlade解决方案是您的解决方案 .

相关问题