【发布时间】:2021-08-29 08:13:50
【问题描述】:
我有 2 张桌子:
表 A
create table A
(id int identity(1,1)
,KeyWord1 nvarchar(50)
,KeyWord2 nvarchar(50)
,KeyWord3 nvarchar(50)
)
表 B
Create table B
(id int identity(1,1)
,Address nvarchar(150)
,Chk int
)
表 A 包含以下值:
insert into A
values
(166, 'elyse', 'vry')
,(243, 'virginia', 'beach')
,(134, 'aris', 'adium')
表 B 包含以下值:
insert into B
values
('35 stadium street, 134 Paris', null)
,('243, Stadiumù road from Paris', null)
当在表 B 上创建新行时,我的目标是使用表 A 中的出现次数设置列 B.chk。
例如:
insert into B
values
('166, road to Champs elysee - 14215 Cdx Evry', null)
表 B 上的触发器应将 B.Chk 设置为 1,因为以下查询与表 A 匹配
select count(*) from inserted
where b.Address like '%166%'
and b.Address like '%elyse%'
and b.Address like '%vry%'
为此,我应该在表 B 上创建一个触发器,但不知道如何在另一个表上“循环”。 我应该使用 for、while 还是 cursor?
【问题讨论】:
-
循环是什么意思,你打算循环什么? SQL 是声明性语言,它接受带有
where条件的select语句并返回没有循环的答案 -
样本数据,以及应该匹配和不匹配的示例将非常有帮助。
-
触发器几乎总是一个坏主意。您真的需要立即填充此字段吗?还是您只是想生成一份报告来确定这一点?
-
不需要循环,但如果你不需要在触发器中进行非sargable查找对其性能没有好处 列立即更新,您应该定期安排此过程。 tag您的特定数据库平台。
-
是的,我需要一个触发器,因为该列的值将从另一个应用程序启动工作流。
标签: sql for-loop while-loop triggers database-cursor