Restricciones CHECK

24/08/2006 - 16:40 por José Redondo | Informe spam
Hola foro.

Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
Server 2005:

Tengo varias columnas de NChar y NVarchar donde me van almacenar por ejemplo
datos como (Edad, CodigoTelefono, NumeroTelefono, NumeroCedulaIdentidad,
etc.).

Requiero una Restricción Check donde solamente se me admitan números y no
caracteres "letras, signos de puntuación, etc"; ya que quiero garantizar por
Base de Datos que dentro de este tipo de columna con este tipo de datos sólo
existan caracteres numericos.

Quién tendría una orientación al respecto o en caso contrario, guiarme haber
como hago eso.

Gracias por la guia y salu2 a todos desde Venezuela.

RedondoJ

Preguntas similare

Leer las respuestas

#1 Eladio Rincón
24/08/2006 - 17:23 | Informe spam
mira si este ejemplo te sirve:

use tempdb
go
drop table dbo.t
go
create table dbo.t (id int, v nchar(30))
go
alter table dbo.t
add constraint check_v check ( isnumeric(v) = 1 )
go
insert dbo.t select 1, 'aaa'
go
insert dbo.t select 1, 12312322.12312
go
select * from dbo.t


De todas formas, si sabes qeu va a ser numérico, usaría una columna de tipo
numerico (numeric, decimal, money, int, bigint...)



Eladio Rincón,
http://www.siquelnet.com

"José Redondo" <José wrote in message
news:
Hola foro.

Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
Server 2005:

Tengo varias columnas de NChar y NVarchar donde me van almacenar por
ejemplo
datos como (Edad, CodigoTelefono, NumeroTelefono, NumeroCedulaIdentidad,
etc.).

Requiero una Restricción Check donde solamente se me admitan números y no
caracteres "letras, signos de puntuación, etc"; ya que quiero garantizar
por
Base de Datos que dentro de este tipo de columna con este tipo de datos
sólo
existan caracteres numericos.

Quién tendría una orientación al respecto o en caso contrario, guiarme
haber
como hago eso.

Gracias por la guia y salu2 a todos desde Venezuela.

RedondoJ



Respuesta Responder a este mensaje
#2 jcac
24/08/2006 - 17:46 | Informe spam
Perdon RedondoJ, pero una consulta Eladio, si bien realice una prueba con lo
que dices y puedo insertar el caracter ',' (coma) tambien el '.' (punto)
solos esto seria correcto.

Saludos


"Eladio Rincón" escribió en el mensaje
news:
mira si este ejemplo te sirve:

use tempdb
go
drop table dbo.t
go
create table dbo.t (id int, v nchar(30))
go
alter table dbo.t
add constraint check_v check ( isnumeric(v) = 1 )
go
insert dbo.t select 1, 'aaa'
go
insert dbo.t select 1, 12312322.12312
go
select * from dbo.t


De todas formas, si sabes qeu va a ser numérico, usaría una columna de
tipo numerico (numeric, decimal, money, int, bigint...)



Eladio Rincón,
http://www.siquelnet.com

"José Redondo" <José wrote in message
news:
Hola foro.

Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
Server 2005:

Tengo varias columnas de NChar y NVarchar donde me van almacenar por
ejemplo
datos como (Edad, CodigoTelefono, NumeroTelefono, NumeroCedulaIdentidad,
etc.).

Requiero una Restricción Check donde solamente se me admitan números y no
caracteres "letras, signos de puntuación, etc"; ya que quiero garantizar
por
Base de Datos que dentro de este tipo de columna con este tipo de datos
sólo
existan caracteres numericos.

Quién tendría una orientación al respecto o en caso contrario, guiarme
haber
como hago eso.

Gracias por la guia y salu2 a todos desde Venezuela.

RedondoJ







Respuesta Responder a este mensaje
#3 Alejandro Mesa
24/08/2006 - 18:05 | Informe spam
Eladio Rincón,

Si el comportamiento de la funcion ISNUMERIC cambio en 2005, entonces es
valido. En SQL Server 2000, esta funcion devueve 1 cuando el parametro que se
pasa esta formato cientifico.

Ejemplo:

select isnumeric('2E2')
go

Resultado:

1

Asi que el uso de esta funcion no garantiza que no se pase caracteres que no
sean digitos entre 0 y 9. Una forma de hacer esto seria negando la igualdad
con una cadena que contenga cualquier caracter que no sea digito.

create table #t1 (
c1 varchar(10) null constraint ck_#t1_c1 check (c1 not like '%[^0-9]%')
)
go

insert into #t1 values(1)
go

insert into #t1 values('2E10')
go

select * from #t1
go

drop table #t1
go


Saludos,

Alejandro Mesa




"Eladio Rincón" wrote:

mira si este ejemplo te sirve:

use tempdb
go
drop table dbo.t
go
create table dbo.t (id int, v nchar(30))
go
alter table dbo.t
add constraint check_v check ( isnumeric(v) = 1 )
go
insert dbo.t select 1, 'aaa'
go
insert dbo.t select 1, 12312322.12312
go
select * from dbo.t


De todas formas, si sabes qeu va a ser numérico, usaría una columna de tipo
numerico (numeric, decimal, money, int, bigint...)



Eladio Rincón,
http://www.siquelnet.com

"José Redondo" <José wrote in message
news:
> Hola foro.
>
> Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
> Server 2005:
>
> Tengo varias columnas de NChar y NVarchar donde me van almacenar por
> ejemplo
> datos como (Edad, CodigoTelefono, NumeroTelefono, NumeroCedulaIdentidad,
> etc.).
>
> Requiero una Restricción Check donde solamente se me admitan números y no
> caracteres "letras, signos de puntuación, etc"; ya que quiero garantizar
> por
> Base de Datos que dentro de este tipo de columna con este tipo de datos
> sólo
> existan caracteres numericos.
>
> Quién tendría una orientación al respecto o en caso contrario, guiarme
> haber
> como hago eso.
>
> Gracias por la guia y salu2 a todos desde Venezuela.
>
> RedondoJ
>
>
>



Respuesta Responder a este mensaje
#4 Eladio Rincón
24/08/2006 - 18:07 | Informe spam
Hola,

no se si he comprendido la pregunta; corrigeme si me equivoco;

si quieres evitar puntos, y comas, podrías añadir:

alter table dbo.t
add constraint check_v check (
isnumeric(v) = 1
and charindex (',', v) = 0
and charindex ('.', v) = 0
)

Sigo opinando que habría que convertir la columna a tipo numérico, entero,
...

Bye,

Eladio Rincón,
http://www.siquelnet.com


"jcac" wrote in message
news:
Perdon RedondoJ, pero una consulta Eladio, si bien realice una prueba con
lo que dices y puedo insertar el caracter ',' (coma) tambien el '.'
(punto) solos esto seria correcto.

Saludos


"Eladio Rincón" escribió en el mensaje
news:
mira si este ejemplo te sirve:

use tempdb
go
drop table dbo.t
go
create table dbo.t (id int, v nchar(30))
go
alter table dbo.t
add constraint check_v check ( isnumeric(v) = 1 )
go
insert dbo.t select 1, 'aaa'
go
insert dbo.t select 1, 12312322.12312
go
select * from dbo.t


De todas formas, si sabes qeu va a ser numérico, usaría una columna de
tipo numerico (numeric, decimal, money, int, bigint...)



Eladio Rincón,
http://www.siquelnet.com

"José Redondo" <José wrote in message
news:
Hola foro.

Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
Server 2005:

Tengo varias columnas de NChar y NVarchar donde me van almacenar por
ejemplo
datos como (Edad, CodigoTelefono, NumeroTelefono, NumeroCedulaIdentidad,
etc.).

Requiero una Restricción Check donde solamente se me admitan números y
no
caracteres "letras, signos de puntuación, etc"; ya que quiero garantizar
por
Base de Datos que dentro de este tipo de columna con este tipo de datos
sólo
existan caracteres numericos.

Quién tendría una orientación al respecto o en caso contrario, guiarme
haber
como hago eso.

Gracias por la guia y salu2 a todos desde Venezuela.

RedondoJ











Respuesta Responder a este mensaje
#5 Eladio Rincón
24/08/2006 - 18:12 | Informe spam
Hola Alejandro,

en 2005 no ha cambiado el comportamiento, por lo que la restricción CHECK
que he definido no sería válida para la funcionalidad que Jose quiere
implementar... Lo siento.

Bye,
Eladio Rincón,
http://www.siquelnet.com


"Alejandro Mesa" wrote in message
news:
Eladio Rincón,

Si el comportamiento de la funcion ISNUMERIC cambio en 2005, entonces es
valido. En SQL Server 2000, esta funcion devueve 1 cuando el parametro que
se
pasa esta formato cientifico.

Ejemplo:

select isnumeric('2E2')
go

Resultado:

1

Asi que el uso de esta funcion no garantiza que no se pase caracteres que
no
sean digitos entre 0 y 9. Una forma de hacer esto seria negando la
igualdad
con una cadena que contenga cualquier caracter que no sea digito.

create table #t1 (
c1 varchar(10) null constraint ck_#t1_c1 check (c1 not like '%[^0-9]%')
)
go

insert into #t1 values(1)
go

insert into #t1 values('2E10')
go

select * from #t1
go

drop table #t1
go


Saludos,

Alejandro Mesa




"Eladio Rincón" wrote:

mira si este ejemplo te sirve:

use tempdb
go
drop table dbo.t
go
create table dbo.t (id int, v nchar(30))
go
alter table dbo.t
add constraint check_v check ( isnumeric(v) = 1 )
go
insert dbo.t select 1, 'aaa'
go
insert dbo.t select 1, 12312322.12312
go
select * from dbo.t


De todas formas, si sabes qeu va a ser numérico, usaría una columna de
tipo
numerico (numeric, decimal, money, int, bigint...)



Eladio Rincón,
http://www.siquelnet.com

"José Redondo" <José wrote in message
news:
> Hola foro.
>
> Alguién podría comentarme e indicarme como se haría lo siguiente en SQL
> Server 2005:
>
> Tengo varias columnas de NChar y NVarchar donde me van almacenar por
> ejemplo
> datos como (Edad, CodigoTelefono, NumeroTelefono,
> NumeroCedulaIdentidad,
> etc.).
>
> Requiero una Restricción Check donde solamente se me admitan números y
> no
> caracteres "letras, signos de puntuación, etc"; ya que quiero
> garantizar
> por
> Base de Datos que dentro de este tipo de columna con este tipo de datos
> sólo
> existan caracteres numericos.
>
> Quién tendría una orientación al respecto o en caso contrario, guiarme
> haber
> como hago eso.
>
> Gracias por la guia y salu2 a todos desde Venezuela.
>
> RedondoJ
>
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida