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;
E também podemos ver as definições de um tipo de dados especifico, executando
sp_help 'UDT_Telefone';
Espero ter ajudado, e até a próxima!