Usuário com melhor resposta
Existe algo semelhante ao UNSIGNED (MySQL) no SQL Server?

Pergunta
-
Todos os tipos inteiros no MySQL podem ter o atributo opcional UNSIGNED. Esse atributo é usado para permitir somente valores não negativos em uma coluna, gerando uma faixa numérica maior de números positivos nessa coluna. Por exemplo, uma coluna do tipo INT:
Faixa: de -2147483648 a 2147483647
Faixa UNSIGNED: de 0 a 4294967295
Existe algo no SQL Server que faça a mesma coisa?
Obrigado pela atenção de todos.
Respostas
-
Michel
no SQL não temos este datatype, mas você pode contornar este problema de duas maneiras
1- criando uma check constraint em sua tabela para aceitar somente valores >0
--cria tabela de teste Create table tbTeste (coluna1 int) go -- cria check constraint alter table tbTeste add constraint chkUnsigned check(coluna1 >=0) go --insere valor correto insert into tbTeste values (1) --insere valor errado insert into tbTeste values (-10)
ao incluir i valor <0 vc deverá receber uma mensagem de erro da constraint
Msg 547, Level 16, State 0, Line 2
The INSERT statement conflicted with the CHECK constraint "chkUnsigned". The conflict occurred in database "dbTeste", table "dbo.tbTeste", column 'coluna1'.2- Criando o datatupe insigned e atribui uma rule >0 para ele.
drop table tbTeste go --cria datatype CREATE TYPE dbo.unsigned FROM int NULL GO -- cria rule >=0 CREATE RULE dbo.unsignedRule AS @value >= 0; GO EXEC sp_bindrule 'dbo.unsignedRule', 'dbo.unsigned' go -- cria tabela com datype unsigned Create table tbTeste (coluna1 unsigned) -- valor correto insert into tbTeste values (1) valor errado insert into tbTeste values (-10) go drop table tbTeste
o erro para valores <0 será:
A column insert or update conflicts with a rule imposed by a previous CREATE RULE statement. The statement was terminated. The conflict occurred in database 'master', table 'dbo.tbTeste', column 'coluna1'.
The statement has been terminated.Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 15 de fevereiro de 2012 11:02
- Marcado como Resposta Michaelfdias quarta-feira, 15 de fevereiro de 2012 12:35
-
Michael,
A orientação do Marcelo foi perfeito, eu particularmente prefiro utilizar uma constraint ao invês de criar um novo tipo de dados.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Michaelfdias quarta-feira, 15 de fevereiro de 2012 12:35
Todas as Respostas
-
Michel
no SQL não temos este datatype, mas você pode contornar este problema de duas maneiras
1- criando uma check constraint em sua tabela para aceitar somente valores >0
--cria tabela de teste Create table tbTeste (coluna1 int) go -- cria check constraint alter table tbTeste add constraint chkUnsigned check(coluna1 >=0) go --insere valor correto insert into tbTeste values (1) --insere valor errado insert into tbTeste values (-10)
ao incluir i valor <0 vc deverá receber uma mensagem de erro da constraint
Msg 547, Level 16, State 0, Line 2
The INSERT statement conflicted with the CHECK constraint "chkUnsigned". The conflict occurred in database "dbTeste", table "dbo.tbTeste", column 'coluna1'.2- Criando o datatupe insigned e atribui uma rule >0 para ele.
drop table tbTeste go --cria datatype CREATE TYPE dbo.unsigned FROM int NULL GO -- cria rule >=0 CREATE RULE dbo.unsignedRule AS @value >= 0; GO EXEC sp_bindrule 'dbo.unsignedRule', 'dbo.unsigned' go -- cria tabela com datype unsigned Create table tbTeste (coluna1 unsigned) -- valor correto insert into tbTeste values (1) valor errado insert into tbTeste values (-10) go drop table tbTeste
o erro para valores <0 será:
A column insert or update conflicts with a rule imposed by a previous CREATE RULE statement. The statement was terminated. The conflict occurred in database 'master', table 'dbo.tbTeste', column 'coluna1'.
The statement has been terminated.Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 15 de fevereiro de 2012 11:02
- Marcado como Resposta Michaelfdias quarta-feira, 15 de fevereiro de 2012 12:35
-
Michael,
A orientação do Marcelo foi perfeito, eu particularmente prefiro utilizar uma constraint ao invês de criar um novo tipo de dados.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Michaelfdias quarta-feira, 15 de fevereiro de 2012 12:35
-
Então..
Posso ter interpretado errado as respostas, mas o UNSIGNED não é um datatype, é uma propriedade que pode ser agregada aos tipos de dados int. A vantagem dessa propriedade não é a de não aceitar valores negativos, e sim "dobrar" a quantidade de números positivos aceitos pelo tipo int definido, sem aumentar o tamanho original de armazenamento desse tipo int.