【发布时间】:2013-10-27 00:14:26
【问题描述】:
您好,我被以下存储过程困住了。这就是我想要做的。
我有两个表:TableA 和 TableB。
- TableA 具有称为 silo、slow 和 close 的列。
- 表 B 具有称为 silo、partno、slow 和 close 的列。
.
- 我有一个 HMI 程序,它是 将筒仓和零件发送给我,我将慢速和关闭发送回。
- 我首先需要查看 TableA 并查看 tableA 中是否有与 HMI 发送给我的内容相匹配的 silo 和 partno。
- 如果是这样,我只需将慢速和接近的 HMI 发送回(输出)。
- 如果 TableA 没有 silo 和 partno,那么我需要
- 仅在筒仓中查看 TableB 并选择顶部 1(可能有多个具有相同筒仓编号的行,因此我需要顶部 1)并将慢速和靠近 HMI 的发送回。
- 我还需要将silo、partno(hmi 发送给我)、slow 和close(来自TableB)插入到TableA 的新行中。
- 如果多次触发此过程,则不应继续插入 表 A 中的行。
我知道 if exists 或 where not exists 可以应用在这个过程中;但我只是不知道如何成功地做到这一点。代码如下。我很感激你的时间。非常感谢
附言errorout是通知hmi如果tableA和tableB没有现有的silo,slow,close,然后弹出一个消息框。就这样。 仅用于验证和通知目的。
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
【问题讨论】:
标签: sql sql-server sql-server-2008