1 - 使用SQL Server 2014,如何编辑此代码? 2 - 如果不满足条件再次返回条件检查 3 - 如果检查条件正确 - 转到下一步 4 - 完成代码后再次返回第一个条件 我想运行无限循环 请参阅图片以获取说明enter image description here
if not exists (
select top 1 1
from sms.dbo.m_link
where link_check = 0
)RETURN
WAITFOR DELAY '00:00:05'
INSERT INTO sms.dbo.M_Out (MessageTo ,MessageType ,Gateway ,UserId)
select top 1 1 link_MessageTo ,link_MessageType ,link_Gateway ,link_UserId
from sms.dbo.m_link
where link_check = 0
WAITFOR DELAY '00:00:10'
答案 0 :(得分:0)
使用您的图像和问题的更新,看起来您正在将记录排入m_link表,并希望一次将一条记录插入到m_out表中?我不确定这是最好的方法,但要回答你的问题,你可以使用While Loop
,这通常是SQL Server中的一个脏词。
您目前拥有的代码逻辑已关闭,对于sql,它读取:
如果不存在(没有要插入的记录)
等几秒钟
插入表中没有任何记录的第一条记录 即将离任的表格。 (不合逻辑)
再等几秒钟
另一方面,如果记录确实存在SQL什么也不做,你还没告诉它你想做什么
我使用while loop
的建议是基于能够完成你提出的任务,我犹豫不决,因为我怀疑这是最好的方法,但是除了以下附加信息之外代码应该完成你想要做的事情。
没有进一步的麻烦:
set nocount on;
--| Supporting Tables
declare @delete as table (
m_linkID int not null
);
declare @m_Out as table (
m_OutID int identity(73,1) not null primary key clustered
, m_linkID int not null
, link_MessageTo nvarchar(255) not null
, link_MessageType int not null
, link_Gateway int not null
, link_UserID int not null
);
declare @m_link as table (
m_linkID int identity(1,1) not null primary key clustered
, link_MessageTo nvarchar(255) not null
, link_MessageType int not null
, link_Gateway int not null
, link_UserID int not null
);
--| populate the m_link table with example records
insert into @m_link (link_MessageTo, link_MessageType, link_Gateway, link_UserID)
select 'Message One', 1, 42, 666 union all
select 'Message Two', 1, 57, 99;
--| show the inserted records
select *
from @m_link
--| evaluate the table for records (Start - While Loop)
while exists (
select 1
from @m_link
)
begin
--| 'move' records into the m_out table
insert into @m_out (m_linkID, link_MessageTo, link_MessageType, link_Gateway, link_UserID)
output inserted.m_linkID
into @delete
select top 1 m_linkID
, link_MessageTo
, link_MessageType
, link_Gateway
, link_UserID
from @m_link
--| remove the record from the m_link table
delete
from @m_link
where m_linkID in (
select m_linkID
from @delete
)
end;
select *
from @m_Out
select *
from @m_link
您可以使用您正在使用的SQL Server版本进行标记,并更详细地解释所有方案和目标。
你可以试试这个:
if not exists (
select 1
from sms.dbo.m_link
where link_check = 0
)
我担心的是您正在尝试在基于集合的世界中实施RBAR解决方案。如果您尝试根据具有Y的行执行X,则该方法是错误的。