首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正式参数@QueryComplete未声明为输出。可能是什么问题。整个存储过程都附加在一起。谢谢

正式参数@QueryComplete未声明为输出。可能是什么问题。整个存储过程都附加在一起。谢谢
EN

Stack Overflow用户
提问于 2022-05-10 11:48:51
回答 1查看 66关注 0票数 0

我已经构建了以下存储过程。它似乎工作得很好,而且数据也在表中。但是,可编程逻辑控制器无法选择@QueryComplete值为1。这里的问题可能是什么。唯一的错误警告如下:

形式参数@QueryComplete未声明为输出.

代码语言:javascript
复制
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER       PROCEDURE [dbo].[SP_Genealogy_WIP]


-- Add the parameters for the stored procedure here
@engine_number      as nvarchar(50),
@line_id            as int,
@stage_id           as int, 
@activity_id        as int,
@activity_value     as nvarchar(50),
@quantity           as int, 
@status             as int,
@plc_YYYY           as int,
@plc_MM             as int,
@plc_DD             as int,
@plc_HR             as int,
@plc_MIN            as int,
@plc_SEC            as int,

-- [Sending Output]
@QueryComplete     int OUTPUT

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from;
-- interfering with SELECT statements.
--SET NOCOUNT ON;
Declare @plc_timestamp nvarchar(20);
SET @plc_timestamp = cast(@plc_YYYY as nvarchar(4)) + '-' +  Cast(@plc_MM as nvarchar(2)) + '-' + Cast(@plc_DD as nvarchar(2)) + ' ' + Cast(@plc_HR as nvarchar(2)) + ':' + Cast(@plc_MIN as nvarchar(2))    + ':' + Cast(@plc_SEC as nvarchar(2));
SELECT @plc_timestamp as 'PLC TIMESTAMP';
    -- Building the Create Statement
            BEGIN TRY
                INSERT INTO [dbo].[Genealogy_WIP]  (
                      [engine_number]
                      ,[line_id]
                      ,[stage_id]
                      ,[activity_id]
                      ,[activity_value]
                      ,[quantity]
                      ,[status]
                      ,[plc_timestamp]
                ) VALUES (
                        @engine_number,
                        @line_id,
                        @stage_id,
                        @activity_id,
                        @activity_value,
                        @quantity,
                        @status,
                        CAST(@plc_timestamp as datetime)
                );
                SET @QueryComplete = 1;
                SELECT @QueryComplete OUTPUT;
                SELECT ' Inserted successfully.' AS Response;
                
            END TRY
            BEGIN CATCH
                -- statement to handle errors
                IF  ERROR_NUMBER()=2627
                SELECT '[Error]-You cannot insert this value into the table as there is a primary key violation (in the Line ID field) or one of the inputs is incorrect.' AS Response
            END CATCH
END
EN

回答 1

Stack Overflow用户

发布于 2022-05-10 13:41:31

当必须从参数输出值时,必须

  1. 在参数列表中指定关键字输出的参数(您已经做过了),
  2. 将值设置为任何具有SET或SELECT的输出参数,而没有其他任何输出参数(您的行"SELECT @QueryComplete;“是错误的。只需写SELECT @QueryComplete = ??“哪里是一个值;

若要执行具有输出中的参数的过程,必须:

  1. 声明一个变量,它将接受返回的值
  2. ,编写exec命令,并指定返回值
  3. 的输出,读取返回的值

例子:

DDL:

代码语言:javascript
复制
CREATE PROC P @DT DATETIME2 OUTPUT
AS
SET @DT = SYSUTCDATETIME();
GO

主管:

代码语言:javascript
复制
DECLARE @DATETIME2_READ DATETIME2;
EXEC P @DATETIME2_READ OUTPUT;
SELECT @DATETIME2_READ;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72185778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档