在SQL Server

时间:2015-04-22 18:36:18

标签: sql-server dns

有没有办法在SQL Server中组合数据类型?即,单元格的值是文本和数字,文本总是相同?

我有一张名为Contract的表格。 ContractID字段的值应为:' TCwxyz'其中' TC'是字符串字符和' wxyz'是整数。

我有以下内容,但它似乎无法正常工作:

CREATE TYPE TenantContracts AS CHAR(6)
CHECK (SUBSTRING(VALUE,1,2)='TC'
AND (SUBSTRING(VALUE,2,4) AS SMALLINT)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

约束被添加到表定义中,您不需要创建类型。

ALTER TABLE Contract
ADD CONSTRAINT chk_ContractID CHECK (
    SUBSTRING(ContractID, 1, 2) = 'TC'
    AND ISNUMERIC(SUBSTRING(ContractID, 3, 4)) = 1
)

此解决方案将接受一些不正确的值,例如TC1.01。我只是为了简单而使用它,而不是试图确定最后4位数是否是整数,这令人惊讶地变得棘手(T-sql - determine if value is integer)。

编辑:如果您确实想要进行更健壮的整数检查,最好的方法是单独检查最后4个字符中的每一个是否为数字:

ALTER TABLE Contract
ADD CONSTRAINT chk_ContractID CHECK (
    SUBSTRING(ContractID, 1, 2) = 'TC'
    AND ISNUMERIC(SUBSTRING(ContractID, 3, 1)) = 1
    AND ISNUMERIC(SUBSTRING(ContractID, 4, 1)) = 1
    AND ISNUMERIC(SUBSTRING(ContractID, 5, 1)) = 1
    AND ISNUMERIC(SUBSTRING(ContractID, 6, 1)) = 1
)