开发者社区> 问答> 正文

SQL Server:如果某些列上没有重复,则插入记录

我在SQL方面的经验非常有限,因此我一直在努力提出正确的问题。

想象我有一个5列的表格

Simulation_ID Param_1 Param_2 Param_3 Param_4 Param_5 Output_folder 下表总结了使用某些参数运行的仿真以及结果的输出文件夹。

我想防止在此表中插入重复项。就我而言,模拟必须具有一组唯一的参数。因此,任何模拟都不应具有相同的参数组合。我很想将主键定义为(ID, Param_1, Param_2, Param_3, Param_4, Param_5),但是我读到,由于性能不佳,不建议使用复合键。当前,Simulation_ID是表的主键。

想象一下,如果有人想添加一个具有唯一ID但与另一个现有记录所使用的参数相同的模拟集。

例:

表中的当前数据:

Simulation_ID Param_1 Param_2 Param_3 Param_4 Param_5 Output_folder

1 0.5 0.4 0.3 0.2 0.1 folder1 2 10 0.4 0.3 0.2 0.1 folder2 新记录是:

Simulation_ID Param_1 Param_2 Param_3 Param_4 Param_5 Output_folder

3 0.5 0.4 0.3 0.2 0.1 folder3 从技术上讲,尽管该记录具有不同的ID和output_folder,但其值(Param_1to Param_5)与记录#1 完全相同。我想进行检查,如果发生这种情况,将引发错误并且未插入记录。

那可能吗?实际上,我的表有20多个列,而20列中的17列是我想用来标记和防止重复的内容。

展开
收起
Puppet 2020-01-03 10:48:07 540 0
1 条回答
写回答
取消 提交回答
  • 您需要唯一约束或(等效)唯一索引。您可以将其添加为:

    
    alter table t add constraint unq_t_params
        unique (param_1, param_2, param_3, param_4, param_5);
    

    如果您尝试添加表中已经存在的一组参数,这将返回错误,从而防止插入

    2020-01-03 10:48:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载