O SQL Server oferece inúmeros tipos de dados para armazenar: Data, texto, número, etc. No entanto, existem algumas situações em que um tipo de dados personalizado é necessário, como por exemplo, um número de telefone, IP, etc.
O SQL Server da condição de criar um novo tipo de dados e atribuir uma regra no mesmo. Vamos criar um tipo de dados para armazenar um telefone com código da cidade.

A primeira coisa que devemos fazer é adicionar um tipo novo:

EXEC sp_addtype UDT_Telefone, 'VARCHAR(13)', 'NOT NULL';

Aqui executamos a procedure “sp_addtype”, informamos os seguintes parâmetros na sequencia: Nome do tipo de dados; Valor que será armazenado e como o tipo “NULL” deve ser tratado. o “UDT” vem de “user defined data types”

Em seguida, devemos criar um “DEFAULT” para informar o valor padrão dele:

CREATE DEFAULT PadraoTelefone AS 'Sem Telefone'

Acima criamos um tipo “DEFAULT” chamado “PadraoTelefone” com um alias “Sem Telefone”.

Devemos associar o default com o tipo de dados:

EXEC sp_bindefault 'PadraoTelefone', 'UDT_Telefone'

Acima associamos o “DEFAULT” “PadraoTelefone” com o tipo “UDT_Telefone”.

Agora vamos criar um regra para termos integridade no formato do telefone:

CREATE RULE RegraTelefone
AS
        (@telefone = 'Sem Telefone')
	OR
	(
			LEN(@telefone) = 13 -- Tamanho total do telefone (incluindo os caracteres de texto)
		AND SUBSTRING(@telefone, 1, 1) = '(' -- 1º carácter deve ser "("
		AND ISNUMERIC(SUBSTRING(@telefone, 2, 2)) = 1 -- Os 2 caracteres dentro de "()" deve ser do tipo número
		AND SUBSTRING(@telefone, 4, 1) = ')' -- 4º carácter deve ser ")"
		AND ISNUMERIC(SUBSTRING(@telefone, 5, 4)) = 1 -- Os 4 caracteres a partir do 5 carácter, deve ser do tipo número
		AND SUBSTRING(@telefone, 9, 1) = '-' -- 9 carácter deve ser "-"
		AND ISNUMERIC(RIGHT(@telefone, 4)) = 1 -- Os últimos 4 caracteres devem ser do tipo número
	);

Acima definimos que o valor deve ser “Sem Telefone”, ou estar no formatado “(99)9999-9999”.

Em seguida associamos a regra “RegraTelefone” ao tipo “UDT_Telefone”

EXEC sp_bindrule 'RegraTelefone', 'UDT_Telefone'

Acima apenas definimos que a regra “RegraTelefone” deve estar associada ao tipo de dados “UDT_Telefone”.

Agora já podemos utilizar o tipo de dados. Vamos criar um tabela e inserir alguns dados:

CREATE TABLE Cliente(
	TelefoneFixo UDT_Telefone NOT NULL,
	TelefoneCelular UDT_Telefone NOT NULL,
);

INSERT INTO Cliente (TelefoneFixo, TelefoneCelular) VALUES('Sem Telefone', 'Sem Telefone');
INSERT INTO Cliente (TelefoneFixo, TelefoneCelular) VALUES('(99)9999-9999', '(99)9999-9999');

Se você tentar inserir algo diferente de “Sem Telefone” ou fora do formato de telefone esperado, o SQL Server irá lançar uma exceção.

Podemos visualizar os tipos de dados criados, executando:

SELECT * FROM sys.types;

Lista com os tipo de dados criados no sql server

E também podemos ver as definições de um tipo de dados especifico, executando

sp_help 'UDT_Telefone';

definição de um tipo de dados especifico do sql server.

Espero ter ajudado, e até a próxima!