简体   繁体   English

对版本号列添加检查约束

[英]Add Check Constraint to Version number column

I'm trying to figure out how to add a CHECK constraint to the Version column to only accept NVARCHAR values with the format as such for example:我试图弄清楚如何将CHECK约束添加到Version列以仅接受格式如下的NVARCHAR值:

(Number.number.number)
10.4.1

or或者

(number.number.number. 3numbers)
10.4.1.111

This is my table:这是我的桌子:

CREATE TABLE dbo.Table
(
    ID int PRIMARY KEY IDENTITY,
    Version NVARCHAR(100) NOT NULL CHECK (Version)
)

Desired result would be, when a users updates the Version column, they must adhere to the defined formats.期望的结果是,当用户更新Version列时,他们必须遵守定义的格式。

For example, 11.3.4 would be acceptable and 12.4.3.444 would be acceptable.例如, 11.3.4是可以接受的, 12.4.3.444也是可以接受的。

Please try the following solution.请尝试以下解决方案。

SQL SQL

USE tempdb;
GO

DROP TABLE IF EXISTS dbo._tbl;

CREATE TABLE dbo._tbl (ID INT IDENTITY PRIMARY KEY, ver VARCHAR(30));
INSERT INTO dbo._tbl (ver) VALUES
('10.4.1'),
('10.4.1.111');

alter table dbo._tbl
add constraint codeCheck check (COALESCE(TRY_CAST(PARSENAME(ver, 1) AS INT) 
    + TRY_CAST(PARSENAME(ver, 2) AS INT) 
    + TRY_CAST(PARSENAME(ver, 3) AS INT), 0) + COALESCE(TRY_CAST(PARSENAME(ver, 1) AS INT)
    + TRY_CAST(PARSENAME(ver, 2) AS INT) 
    + TRY_CAST(PARSENAME(ver, 3) AS INT) 
     + TRY_CAST(PARSENAME(ver, 4) AS INT), 0) > 0);

-- it will fail
INSERT INTO dbo._tbl (ver) VALUES
('10.4.r');

-- it will work
INSERT INTO dbo._tbl (ver) VALUES
('17.7.77');

SELECT * FROM dbo._tbl;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM