SQL表一次又一次地接受相同的名称检查数据库名称

时间:2011-06-17 09:08:00

标签: mysql sql database insert

我正在尝试在表guestpasstypes中插入guestpass类型名称,并且一次使用此语句检查数据库是否已经使用该名称:

@"INSERT INTO guestpasstypes(guestPasstype_Name)values('" + tbPassType.Text + "') where not exists (select 'guestPasstype_Name' from guestpasstypes where guestPasstype_Name = '" + tbPassType.Text + "')"

但它也接受重复的名称,但它不起作用。有人请帮忙吗?

3 个答案:

答案 0 :(得分:3)

对于SQL Server,它看起来像这样。

insert into guestpasstypes (guestPasstype_Name)
select 'name1'
where not exists (select *
                  from guestpasstypes
                  where guestPasstype_Name = 'name1')

我认为它也适用于MySQL。

如果您使用的是SQL Server 2008,则可以使用MERGE

merge guestpasstypes as G
using (select 'name2') as S(Name)
on G.guestPasstype_Name = S.Name
when not matched then
  insert (guestPasstype_Name) values (Name);

<强>更新

我认为第一个选项可以应用于您的问题:

@"INSERT INTO guestpasstypes(guestPasstype_Name) select '" + tbPassType.Text
  + "' where not exists (select * from guestpasstypes where guestPasstype_Name = '"
  + tbPassType.Text + "')"

答案 1 :(得分:1)

如果您希望它抛出错误,您可以:

  • 在列上放置一个唯一索引(最简单和首选的方式)

  • 编写一个返回错误标志的存储过程。在该过程中,首先检查匹配值,如果找到匹配值,则设置错误标志并返回。否则插入正常。

答案 2 :(得分:0)

尝试INSERT IGNORE或INSERT ON DUPLICATE KEY:

INSERT IGNORE INTO `guestpasstypes`(`guestPasstype_Name`) values('" + tbPassType.Text + "');

OR

INSERT INTO `guestpasstypes`(`guestPasstype_Name`)values('" + tbPassType.Text + "') ON DUPLICATE KEY UPDATE `guestPasstype_Name` = `guestPasstype_Name`;