2015-04-22 2 views
-2

Есть ли способ объединить типы данных в SQL Server? т. е. имеет значение ячейки как текст и номер, где текст всегда один и тот же?Объединить типы данных в 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) 

Любая помощь будет оценена.

ответ

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).

Edit: Если вы действительно хотели сделать более надежную проверку целого, пожалуй, лучше всего было бы просто проверить по отдельности, если каждый из последних 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 
) 
Смежные вопросы