【发布时间】:2026-01-10 02:45:01
【问题描述】:
我有一个专栏Col1 nvarchar(10) null
我必须编写一个检查约束或触发器(我认为检查约束不可能),当且仅当某些数据输入到字段中时,Col1 从 null 更改为 not null,或者更确切地说,在字段中输入一些非空值后,它将拒绝该列获取空值。
这是因为应用程序首先检查该字段是否为空,如果是,则为其添加一些值。之后该字段就不能改回null了。
现在我有以下内容:
create trigger [TRG_Col1_NotNull] on my.Table
instead of update
as
begin
if exists (
select * from inserted as i
where i.Col1 is null
)
raiserror ('You can not change the value of Col1 to null', 16, 1)
rollback transaction
end
这是最好的(甚至是正确的)方法,还是有更好更简单的解决方案(也许以某种方式检查约束)?
好的!更新!
应用程序是这样工作的:
它首先以PK column, Col1, Col2, Col3 值1, null, text, date 将数据保存到表中。之后,它检查Col1 是否为空并读取PK column 并将其值写入Col1。所以我得到了1, 1, text, data。
【问题讨论】:
-
你好。我认为可能存在某种概念错误:当几条记录具有 Col1 NULL 并且然后使用 Col1 插入一些新记录时会发生什么情况!= NULL?在这种情况下,现有的 NULL 值将不符合您的期望……它们应该自动更新吗?或者您只是想阻止插入新的 NULL 值?此外:您是否可以提供一些示例数据/表结构/ ...?
-
您需要编写 ALTER TABLE 语句。 *.com/questions/689746/…
-
该列不能有空值。应用程序总是提供一些价值。所以他们不是概念错误。我只是想防止插入空值,但在插入非空值之后。 @Amit:默认情况下,我在表中不能有非空约束,因为应用程序首先检查这是否为空字段,然后才发送一个要插入该字段的值。之后我需要防止输入回空值。
标签: sql sql-server sql-server-2016