【问题标题】:Null strings getting added to primary key field空字符串被添加到主键字段
【发布时间】:2012-11-14 16:28:51
【问题描述】:

我的表单中有一个主键列year

每当用户创建新表单时,他都应从下拉列表中填充此字段。

但是如果用户犯了错误并且没有从下拉列表中选择任何内容,则会附加一个空字符串""。选择后,选择后操作时,在数据库表中创建记录。

我的问题:
当用户在做出选择后发布到数据库时:主键列最终接受空字符串""

这不应该抛出一个错误,因为主键字段不应该有一个空/空字符串吗?

我检查了表创建脚本,列设置为Not Null,没有分配默认值。

我使用的是 SQL Server 2008。

【问题讨论】:

  • 尝试在表单到达数据库之前对其进行验证,或者您可以设置触发器或检查约束以禁止空字符串。
  • 您需要小心使用您的术语:NULL空字符串 相同。一个空字符串 "" 应该 not 被称为 null 字符串 - 这只是要求混淆和麻烦.....
  • @marc_s 除非您使用的是 Oracle,否则它们是相同的。
  • year 的数据类型到底是什么?我希望它是某种类型的整数而不是字符串。
  • @NullUserException:OP 明确提到他正在使用 SQL Server - 这就是我所指的目标产品。

标签: sql sql-server sql-server-2008 null primary-key


【解决方案1】:

NULL 和空字符串在 SQL Server 中与 Oracle 不同。 PK 可以有一个空字符串。

当然,PK 必须是唯一的,因此只能有一个这样的空字符串,除非它是复合 PK 并且其他列具有不同的值。

您应该在插入尝试之前验证这一点,但可以添加一个检查约束作为最后一道防线。

【讨论】:

  • 是的。这是一个疏忽,目前无法在代码中更改它。换表会更容易。我查看了添加触发器的选项,但 SQL Server 没有触发器“插入前”
  • 好的。所以我创建了一个可以在每次插入时触发的触发器!看起来它的工作。感谢您的所有投入!
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
  • 2017-03-09
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多