2015-04-22 97 views
-2

有什么方法可以在SQL Server中合并数据类型?即在文本总是相同的情况下,将单元格的值设为文本和数字两者?在SQL Server中合并数据类型

我有一个表ContractContractID字段的值应为:'TCwxyz',其中'TC'是字符串字符,'wxyz'是整数。

我有以下的,但它似乎并不奏效:

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

任何援助将不胜感激。

回答

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 
)