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:
Mostrar la cita
#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:
Mostrar la cita
#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:

Mostrar la cita
#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:
Mostrar la cita
#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:
Mostrar la cita
Ads by Google
Search Busqueda sugerida