sql server(如果存在)问题
您好,我被以下存储过程卡住了。这就是我要做的 我有两张桌子:桌子A和桌子Bsql server(如果存在)问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,您好,我被以下存储过程卡住了。这就是我要做的 我有两张桌子:桌子A和桌子B TableA中的列名为silo、slow和close 表B中的列名为silo、partno、slow和close 我有一个HMI程序 发送给我筒仓和零件号,我将返回慢速和关闭 我首先需要查看TableA,看看TableA中是否有一个思洛存储器和partno,它与HMI发送给我的信息相匹配 如果是这样,我只需将缓慢且接近HMI(输出)的信号发送回 如果TableA没有筒仓和零件号,那么我需要 仅查看表B中的思洛存
- TableA中的列名为silo、slow和close李>
- 表B中的列名为silo、partno、slow和close李>
- 我有一个HMI程序 发送给我筒仓和零件号,我将返回慢速和关闭
- 我首先需要查看TableA,看看TableA中是否有一个思洛存储器和partno,它与HMI发送给我的信息相匹配李>
- 如果是这样,我只需将缓慢且接近HMI(输出)的信号发送回
- 如果TableA没有筒仓和零件号,那么我需要
- 仅查看表B中的思洛存储器,选择顶部1(可能有多行具有相同的思洛存储器编号,因此我需要顶部1),然后将慢速和接近HMI的数据发送回李>
- 我还需要将思洛存储器、零件号(hmi发送给我)、慢速和关闭(从表B)插入表a中的新行李>
- 如果此过程被多次触发,则不应继续插入 表格中的行李>
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
我想这就是你想要的:
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
BEGIN
declare @found bit = 0
set @errorout = 0
select @slow = slow
, @close = close
, @found = 1
from controls.TableA
where silo = @silo
and partno = @partno
if @found != 1
begin
select top 1
@found = 1
, @slow= slow
, @close = close
From controls.TableB
Where silo = @silo
--order by something to ensure consistent results?
if @found = 1
begin
insert into controls.TableA (silo, partno, slow, close)
values (@silo, @partno ,@slow, @close)
end
else
begin
@errorout = 1 --neither A nor B held the value we were after
end
end
END
这工作做得很好!非常感谢你。我感谢你的时间和努力。也谢谢尼科阿尔马尔科维诺维奇!