Sql-Server

預設約束問題

  • January 21, 2020

我有一個表TempTable,其中一列具有預設約束

ALTER TABLE [dbo].[TempTable] 
ADD  CONSTRAINT [DF_TempTable_Version]  
DEFAULT ((1)) FOR [Version]

Version定義為decimal (18,1)

大多數情況下,值 1.00 被插入到列中,但在某些情況下,它插入了一個空值。

我們如何確定約束是否失敗或者是否有其他問題導致了這種情況?

我們如何確定約束是否失敗或者是否有其他問題導致了這種情況?

最可能的原因是客戶端只是插入了一個空值,或者將列更新為空值,而預設約束都不會阻止這兩者。

如果您不想要空值,只需將 Version 列聲明為 NOT NULL,或添加檢查約束。

如果您在ALTER TABLE並發插入時發出命令,這可能是可能的,除非您設置一個 high ISOLATION LEVEL。發出命令*後,每個新插入都將提供正確的預設值。*如果在初始值之後空值保留在列中ALTER TABLE,您可以簡單地通過更新來更改它們,例如

UPDATE tempTable
SET Version = 1
WHERE Version IS NULL

引用自:https://dba.stackexchange.com/questions/105758