这里给你的上下文是我的数据库架构。
水果表
Id Name
1 Gala Apples
2 Navel Oranges
3 Peach
4 Mandarin Oranges
5 Kiwi
6 Fuji Apples
相交表:
FruitId CrossRefFruitId
1 6
2 4
所以我的交叉表有水果值。
1 (Gala Apples) are related to 6 (Fuji Apples)
2 (Navel Oranges) are related to 4 (Mandarin Oranges)
在UI中,用户正在查看有关Gala Apples的详细信息。我希望能够有一个“另见:富士苹果”。
现在我被告知我不希望有反向条目,所以1,6很好但是6,1这是浪费,这是有道理的。
所以我正在尝试编写一个TSQL检查,以确定是否存在1,6或6,1。
最终这将进入INSERT触发器,该触发器将检查传入的行以查看组合是否存在然后允许插入或跳过。
谷歌搜索我发现REVERSE用于反转字符串并最终获得大量的点击以进行EXCEPT和INTERSECT。
所以,即使只是知道google的正确术语,我也可以接受自我教育。
答案 0 :(得分:1)
create table #test
(
id1 int,
id2 int
)
insert into #test
select 1,6
union all
select 2,5
union all
select 6,1
union all
select 5,3
union all
select 5,2
select * from #test t1
where exists(
select 1 from #test t2 where t1.id1=t2.id2 and t1.id2=t2.id1)
根据问题进行更新:
您的触发器应包含下面的代码行,用于检查是否存在反转的行。
if exists(
select 1 from
#test t1
join
inserted i
on i.id1=t1.id2 and i.id2=t1.id1
)
begin
rollback tran
--some message---
end