插入前检查约束

时间:2016-07-31 19:13:45

标签: sql-server tsql

问题:我们说我有2张桌子

EnStudents
PnStudents

具有相同的列

ID, Name

EnStudents有5行

1   Jeni
2   Maria
3   John
4   Maria
5   Philip

和PNStudents有2行 10杰尼 13约翰

虽然PNStudents有2行,但在name列上有唯一键。

现在,当我尝试将ENStudents中的行插入PNStudents时,显然会出现错误,指出存在违反唯一键的错误

在发送插入内容之前,我需要检查哪些记录会导致错误,以便我可以使用TSQL更改冲突记录并在冲突行前面添加一些数字

由于

1 个答案:

答案 0 :(得分:1)

  

现在,当我将来自EN学生的记录插入PN学生时,显然会出现错误,说明存在违反唯一密钥的错误..

     

在发送插入内容之前,我需要检查哪些记录会导致错误

在名称列上执行一个组,它将为您提供欺骗..

Select name,count(*) as cnt
From 
ENStudents 
group by name
having count(*)>1

您还可以插入如下所示的行,以便它不会违反大小写约束。这使用SQL Server 2008提供的“With Ties Option”

Insert Into pnstudents
select top 1 with ties id,name
from 
enstudents
order by
row_number() over (partition by name order by name)