Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在返回结果集的存储过程中设置参数_Sql_Sql Server_Vb.net_Vba - Fatal编程技术网

Sql 在返回结果集的存储过程中设置参数

Sql 在返回结果集的存储过程中设置参数,sql,sql-server,vb.net,vba,Sql,Sql Server,Vb.net,Vba,我正试图整合一些代码,但在我打开这个特定的蠕虫罐头之前,我想从你们这里了解一下。如果我有几个存储过程 存储过程1-“主程序”,设置@test sproc2—在@test存在时执行的过程,并返回resultset和(如果可能)resets@serial sproc3—在@test不存在时执行并返回resultset和(如果可能)resets@serial的过程 存储过程1 @leftStack INT, @leftTray INT, @midStack INT, @

我正试图整合一些代码,但在我打开这个特定的蠕虫罐头之前,我想从你们这里了解一下。如果我有几个存储过程

存储过程1-“主程序”,设置@test

sproc2—在@test存在时执行的过程,并返回resultset和(如果可能)resets@serial

sproc3—在@test不存在时执行并返回resultset和(如果可能)resets@serial的过程

存储过程1

    @leftStack INT,
    @leftTray INT,
    @midStack INT,
    @midTray INT,
    @rightStack INT,
    @rightTray INT

    AS


    DECLARE @soLineNumber varchar(50)
    DECLARE @serial VARCHAR(50)
    DECLARE @rack INT
    DECLARE @tray INT
    DECLARE @position INT

    SELECT @test = oL.[SERIAL_NUMBER]
        FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_OPTICS] AS oL
            WHERE NOT EXISTS 
            ( 
            SELECT [SERIAL_NUMBER] 
                FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_OPTIC_RESULTS] AS rL 
                    WHERE oL.[SERIAL_NUMBER] = rL.[SERIAL_NUMBER] 
            ) 
            AND NOT EXISTS 
                ( 
                SELECT [SERIAL_NUMBER] 
                    FROM [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_OPTIC_INSERTED] AS oI 
                        WHERE oL.[SERIAL_NUMBER] = oI.[SERIAL_NUMBER] 
                ) 
    --      AND oL.[SO_LINE_NUMBER] = @soLineNumber --pick regardless of SO line number, to reduce gaps between lines
            AND ((oL.[RACK] = @leftStack AND oL.[TRAY] = @leftTray) 
            OR (oL.[RACK] = @midStack AND oL.[TRAY] = @midTray) 
            OR (oL.[RACK] = @rightStack AND oL.[TRAY] = @rightTray))
         ORDER BY [SO_LINE_NUMBER] ASC
IF NULLIF(@test, '') IS NOT NULL
    BEGIN
        EXEC sproc2
    END
IF NULLIF(@test, '') IS NULL
    BEGIN
        EXEC sproc3
    END

UPDATE [ROBOTICS_OPTICS_MECHUAT].[dbo].[AOF_ORDER_OPTICS] SET [PICKED] = 'True' WHERE [SERIAL_NUMBER] = @serial
END
我的问题是: 1) 如何从存储过程2和存储过程3重置@serial


2) 在ADO记录集查询中,执行的存储过程的结果是否会拉入,如果是,如何拉入?

要使其工作,应如下定义
sproc2
sproc3

CREATE PROC sproc2 @test VARCHAR(50), @serial VARCHAR(50) OUTPUT

它的作用是将
@test
的值作为值参数发送。
@serial
上的
输出
关键字使您能够跟踪在
@serial

上所做的任何更改。测试将仅在存储过程1中可用。这就是临时表和变量的工作方式。如何在sproc1中执行sproc1以及处理
@serial
?如果从ADO执行sproc1,SPROC2或3的结果集是否会按预期生成?i、 e.如果我在存储过程控制2中的表中选择col1、col2、col3,col1、col2和col3是否会显示为执行存储过程控制1的记录集结果?