こんにちは、次のストアド プロシージャに行き詰まっています。これが私がやろうとしていることです。
TableA と TableB の 2 つのテーブルがあります。
- TableA には、silo、slow、および close という名前の列があります。
- テーブル B には、silo、partno、slow、および close という列があります。
.
- サイロとパートノを送信している HMI プログラムがあり、スローとクローズを返信しています。
- 最初に TableA を見て、HMI から送られてくるものと一致する silo と partno が tableA にあるかどうかを確認する必要があります。
- そうであれば、HMI (出力) に遅くて近いものを送り返すだけです。
- TableA に silo と partno がない場合は、
- サイロのみで TableB を見て、一番上の 1 を選択し (同じサイロ番号の行が複数ある可能性があるため、一番上の 1 が必要です)、遅くて HMI に近いものを送り返します。
- また、サイロ、partno (hmi から送られてくる)、slow と close (TableB から) を挿入し、TableA の新しい行に挿入する必要があります。
- このプロシージャが複数回トリガーされた場合、tableA に行を挿入し続けるべきではありません。
この手順では、存在する場合または存在しない場合を適用できることを知っています。しかし、これを成功させる方法がわかりません。コードは以下です。お時間をいただきありがとうございます。どうもありがとうございました
psエラーアウトは、テーブルAとテーブルBに既存のサイロ、スロー、クローズがない場合、メッセージボックスをポップアップすることをhmiに通知することです。それで全部です。確認と通知のみを目的としています。
USE [Product]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [Controls].[spSiloSettings]
@Silo int
,@PartNo Varchar (50)
,@Slow float output
,@Close float output
,@errorout int output
AS
if exists (select slow, close from controls.TableA where @silo = silo and @partno= partno)
set @errorout = 0
select @slow= slow, @close = close
from TableA
where @silo = silo
if not exists(select top 1 @silo = silo, @slow= slow, @close = close)
From controls.TableB
Where silo = @silo
insert into controls.TableA (silo, partno, slow, close)
values (@silo, @partno ,@slow, @close)
end