我正在 SQL Server 中創建一個表,并且我有一個decimal型別的列不應接收值 0,我該怎么做?
CREATE TABLE Producto
(
Idproducto [int] PRIMARY KEY NOT NULL
DEFAULT (NEXT VALUE FOR Idprod),
Nombre [varchar](100) NOT NULL,
Precio_Unitario DECIMAL (18,2)
);
uj5u.com熱心網友回復:
您可以使用CHECK約束。例如:
CREATE TABLE Producto
(
Idproducto int PRIMARY KEY NOT NULL,
Nombre varchar(100) NOT NULL,
Precio_Unitario DECIMAL(18, 2),
CONSTRAINT chk1 CHECK (Precio_Unitario <> 0)
);
典型的插入會很好地作業:
INSERT INTO Producto (Idproducto, Nombre, Precio_Unitario)
VALUES (1, 'A', 2);
INSERT INTO Producto (Idproducto, Nombre, Precio_Unitario)
VALUES (2, 'B', NULL);
但如果你嘗試:
INSERT INTO Producto (Idproducto, Nombre, Precio_Unitario)
VALUES (3, 'C', 0);
你會得到一個錯誤:
訊息 547 級別 16 狀態 0 第 1 行
INSERT 陳述句與 CHECK 約束“chk1”沖突。沖突發生在資料庫“fiddle_914c4e0be5e144138dc870cf3d5a6ced”、表“dbo.Producto”、“Precio_Unitario”列中。訊息 3621 級別 0 狀態 0 行 1
陳述句已終止。
請參閱db<>fiddle 上的運行示例。
uj5u.com熱心網友回復:
您可以創建一個檢查約束,這將強制該列中的所有值都為空或不同于零
CREATE TABLE #Producto
(
Idproducto [int] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR Idprod),
Nombre [varchar](100) NOT NULL,
Precio_Unitario DECIMAL (18,2),
constraint chk_Precio_Unitario check (Precio_Unitario is null or Precio_Unitario <> 0)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367500.html
標籤:sql sql-server
