en UNIQUE

24/09/2003 - 19:04 por VC | Informe spam
Hola:

A ver si alguien sabe responderme.

Es posible crear un indice sobre un campo (no la clave principal) para poder
relacionarlo con otro campo de otra tabla y forzar a que no permita valores
duplicados salvo en el caso de que sea nulo¿?

Es decir, dos registros no podrian tener el mismo valor cuando este es
distinto de nulo, pero sí si son nulos.


En Access basta con decir que un campo es
Requerido: NO
Indexado: Sin (Sin duplicados)

Adios...
Danyan

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
25/09/2003 - 10:39 | Informe spam
Si, en la creación de la tabla debes indicar que admita NULL, y luego creas
un índice que no admita duplicados.

Te funcionará como indicas. Sólo comprueba si está duplicado el valor y
genera error cuando se le pase un valor distinto de NULL. Los NULL no los
considera duplicados.

Un saludo
Salvador Ramos
Murcia - España

No puedes conseguir software rápidamente disminuyendo su calidad.
En cambio, si que lo consigues aumentando la calidad.

www.helpdna.net (información sobre Windows DNA, SQL Server, .NET, ...)


Microsoft MVP SQL Server
MCP SQL Server
PASS Spanish Group (www.sqlpass.org)


"VC" escribió en el mensaje
news:
Hola:

A ver si alguien sabe responderme.

Es posible crear un indice sobre un campo (no la clave principal) para


poder
relacionarlo con otro campo de otra tabla y forzar a que no permita


valores
duplicados salvo en el caso de que sea nulo¿?

Es decir, dos registros no podrian tener el mismo valor cuando este es
distinto de nulo, pero sí si son nulos.


En Access basta con decir que un campo es
Requerido: NO
Indexado: Sin (Sin duplicados)

Adios...
Danyan



Respuesta Responder a este mensaje
#2 VC
25/09/2003 - 12:08 | Informe spam
<Si, en la creación de la tabla debes indicar que admita NULL, y luego creas
un índice que no admita duplicados.

Te funcionará como indicas. Sólo comprueba si está duplicado el valor y
genera error cuando se le pase un valor distinto de NULL. Los NULL no los
considera duplicados.

Un saludo
Salvador Ramos
Murcia - España>>>



Gracias por la respuesta, pero si solo hago eso, no me permite menter más de
un valor
nulo en el campo del indice.

En el campo en cuestión marco "Permitir valores nulos" y en el indice creado
para ese
campo "Crear con UNIQUE". Haciendo esto no me permite duplicar nulos.

¿Podria ser por algo de la configuración de SQL Server? (algo parecido al
tema
de los formatos de fechas¿?)

Adios...
Danyan...
Respuesta Responder a este mensaje
#3 Salvador Ramos
25/09/2003 - 12:39 | Informe spam
Perdón, claro que los considera duplicados, si le pones un índice UNIQUE.
Me confundí con lo que ocurre con las claves externas, en las que si se
pueden utilizar NULL sin incumplir la IRD (integridad referencial
declarativa).

No se puede conseguir lo que indicas, a no ser que lo hagas mediante
Triggers.

Un saludo
Salvador Ramos
Murcia - España

No puedes conseguir software rápidamente disminuyendo su calidad.
En cambio, si que lo consigues aumentando la calidad.

www.helpdna.net (información sobre Windows DNA, SQL Server, .NET, ...)


Microsoft MVP SQL Server
MCP SQL Server
PASS Spanish Group (www.sqlpass.org)


"VC" escribió en el mensaje
news:
<Si, en la creación de la tabla debes indicar que admita NULL, y luego


creas
> un índice que no admita duplicados.
>
> Te funcionará como indicas. Sólo comprueba si está duplicado el valor y
> genera error cuando se le pase un valor distinto de NULL. Los NULL no


los
> considera duplicados.
>
> Un saludo
> Salvador Ramos
> Murcia - España>>>

Gracias por la respuesta, pero si solo hago eso, no me permite menter más


de
un valor
nulo en el campo del indice.

En el campo en cuestión marco "Permitir valores nulos" y en el indice


creado
para ese
campo "Crear con UNIQUE". Haciendo esto no me permite duplicar nulos.

¿Podria ser por algo de la configuración de SQL Server? (algo parecido al
tema
de los formatos de fechas¿?)

Adios...
Danyan...









Respuesta Responder a este mensaje
#4 Javier Loria
25/09/2003 - 15:28 | Informe spam
Hola Danyan:
Yo se que NO es lo que deseas, pero una alternativa es modelar diferente
la BD, agregando una tabla mas que sirve de como "union" entre las otras
tablas.
Esta tabla tendria como columnas las columnas que son Llave Primaria de
las dos tablas que pretendes unir, ninguna permitiria Nulos, defines como
Llave Primaria todas las columnas, estableces FK's con las tablas y creas un
UNIQUE sobre la parte que quieres mantener unica. Los Nulos simplemente no
se insertan a la tabla.
Suena mas complicado de lo que es, pero si nos envias el esquema de las
tablas que estas modelando o un ejemplo te escribo el codigo para ver si es
algo que te funcionaria. Como dice bien Salvador de otra forma solo con
Triggers.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Salvador Ramos escribio:
Perdón, claro que los considera duplicados, si le pones un índice
UNIQUE. Me confundí con lo que ocurre con las claves externas, en las
que si se pueden utilizar NULL sin incumplir la IRD (integridad
referencial declarativa).

No se puede conseguir lo que indicas, a no ser que lo hagas mediante
Triggers.


"VC" escribió en el mensaje
news:
<Si, en la creación de la tabla debes indicar que admita NULL, y
luego


creas
un índice que no admita duplicados.

Te funcionará como indicas. Sólo comprueba si está duplicado el
valor y genera error cuando se le pase un valor distinto de NULL.
Los NULL no los considera duplicados.

Un saludo
Salvador Ramos
Murcia - España>>>



Gracias por la respuesta, pero si solo hago eso, no me permite
menter más de un valor
nulo en el campo del indice.

En el campo en cuestión marco "Permitir valores nulos" y en el
indice creado para ese
campo "Crear con UNIQUE". Haciendo esto no me permite duplicar nulos.

¿Podria ser por algo de la configuración de SQL Server? (algo
parecido al tema
de los formatos de fechas¿?)

Adios...
Danyan...
Respuesta Responder a este mensaje
#5 VC
25/09/2003 - 19:00 | Informe spam
Hola y muchas gracias por las respuestas.

Con lo de usar Triggers supongo que os referis para realizar actualizaciones
y
eliminaciones es en casacada, no¿?

Lo que comenta Javier Loria de crear tablas, YA ME GUSTARIA PODER HACERLO.
Estoy migrando unas aplicaciones hechas en Access 97 base de datos y
programas a
Access XP y los datos en SQL Server, y añadir tablas intermedias me
obligaria a modificar
demasiadas cosas.
De todos modos lo estudiaré a ver si haciendo eso y creando un par de
consultas que trabajen
con los campos de las tablas actuales, no tengo que modificar los programas.

Trataré de usar triggers u otra cosa si la hay (es la primera vez que
trabajo con estas caracteristicas
de SQL Server).

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