sql默认替换

时间:2018-01-23 15:45:51

标签: sql sql-server constraints

是否可以在列上定义一个约束,该约束将用默认值替换某个输入值?

我有一个带有类型列的表,除非用户定义了该功能的类型,否则该表应始终为默认值。

当类型为NULL时,它将被默认值替换。不幸的是,当未定义类型时,表单处理程序不会填充NULL。它改为填充一个空字符串。

如何编程SQL以使用默认值替换这些空字符串?

代码片段:

CREATE TABLE [dbo].[ACC_Plannen](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PLANID] [nchar](50) NULL,
[plantype] [nvarchar](500) NULL CONSTRAINT [DF_ACC_Plannen_plantype]  DEFAULT ('Algemeen'),

2 个答案:

答案 0 :(得分:0)

如果你只能在SQL上处理这个问题,你可以尝试一些事情:

  • 创建一个存储过程,用于清理输入并插入/更新表格;
  • 创建一个插入/更新触发器,为您修复值。

在上述两者之间我会使用存储过程,因为你必须明确地调用它,而触发器会隐式地执行它。甚至可能添加一个触发器,它会在无效输入上引发错误,而不是修复它。

理想情况下,您可以在将输入发送到SQL之前清除输入。然后你可以在你的桌子上有NOT NULL DEFAULT约束。

答案 1 :(得分:0)

主要问题如下:“你想拒绝插入并修复前端的数据(用户/应用程序prgm)。或者只是更新后端(数据库)的坏数据。”

可以使用check constraint来验证数据并确保没有空字符串。违规会导致错误。

可以使用after insert trigger将空字符串重新(更新)为您想要的值。

只要知道用例。

如果您是批量插入且检查约束失败,则整批中止。

如果要插入大量数据,将对每条记录执行触发器。在这种情况下,在保证大量批量加载之后可能是更新语句。

一如既往,这取决于您的情况。

快乐的编码!