• Viernes 15 de Noviembre de 2024, 18:56

Autor Tema:  CLAVE PRIMARIA ACEPTA VALORES NULOS  (Leído 17138 veces)

elpipo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
CLAVE PRIMARIA ACEPTA VALORES NULOS
« en: Miércoles 6 de Julio de 2011, 18:58 »
0
Hola soy un principiante que le gusta mucho la programación, he instalado Sql Server 2008 enterprise, para crear bases de datos y realizar consultas, encontrandome con la sorpresa que la clave primaria sea del tipo de datos que sea y creada en modo grafico o modo comando acepta valor en blanco o nulo, resultando muy extraño por lo que me encomiendo a vosotros para buscar una explicacion, tambien he instaldo sql server 2005 y tambien pasa lo mismo al crear una base de datos la clave primaria acepta valor null y blanco solamente una vez por si intentas introducir valor null una segunda vez te dice que no puede tener valores duplicados, lo mismo pasa con los blancos.

Gracias

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #1 en: Miércoles 6 de Julio de 2011, 23:17 »
0
Hola.

En relidad no ses posible que una llave primaria acepte valores nulos,

Cita de: "wikipedia"

La mayor diferencia es que para claves únicas, no se impone automáticamente la restricción implícita NOT NULL, mientras que para claves primarias, sí. Así, los valores en columnas de clave única pueden o no ser NULL.

http://es.wikipedia.org/wiki/Clave_primaria

Ahora hay que entender que NULL es es un valor especial que representa a un valor desconocido o una ausencia de valor, pero no significa que NULL sea una cadena vacia, tampoco es un 0. estos valores son al convertirse ya a un tipo de dato; vacio para texto , cero para numericos
pero Una cadena vacia es un valor perfectamente valido para una llave primaria (obviamente en tipos de datos texto)

Si SQL te esta permitiendo introduccir  NULL en una clave primaria entonces

La llave no ha sido definida correctamente
o puede ser que estes confundiendo una llave primaria con una llave unica, usando la interfaz visual intenta hacer un campo llave primaria y seleccionando Allow Null

Puedes mostrar la estructura de tu tabla?



Saludos
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

elpipo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #2 en: Jueves 7 de Julio de 2011, 09:31 »
0
Hola la Base de datos se llama ESCUELA, la tabla ALUMNO y los campos de esta tabla son:
NOMBRE(PK, Char(10), NO NULL)
DNI(Char(10),NO NULL)
CP(Char(10), NO NULL)

Te lo describo tal cual me lo define Sql Server cuando despliegas COLUMNAS dentro del explorador de Objetos

Bueno pues si yo me voy a consultas y ejecuto:

INSERT INTO ALUMNO(NOMBRE,DNI,CP)
VALUES('NULL','','')

Aqui me dice 1 filas afectadas
Por lo que la consulta se ha ejecutado correctamente
Hago:
SELECT * FROM ALUMNO
Y exactamente NOMBRE tiene NULL y los demas en blanco.
Si necesitas algo mas me dices que estoy super interesado en dar con la solucion
Gracias

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #3 en: Jueves 7 de Julio de 2011, 10:55 »
0
Muy bien mira


supongo que lo anotaste en una especie de pseudocodigo, para explicar tu tabla
Código: SQL
  1. NOMBRE(PK, CHAR(10), NO NULL)
  2. DNI(CHAR(10),NO NULL)
  3. CP(CHAR(10), NO NULL)
  4.  

La sintaxis de esta idea por ejemplo es:

Código: SQL
  1.  
  2. CREATE TABLE ALUMNOS2 (
  3.     NOMBRE CHAR(80)  PRIMARY KEY NOT NULL,
  4.     DNI CHAR(40) NOT NULL,
  5.     CP  CHAR(10) NOT NULL);
  6.  
  7.  

Lo que tu haces aqui es insertar la palabra NULL (una cadena perfectamente valida)

Código: SQL
  1. INSERT INTO ALUMNO(NOMBRE,DNI,CP) VALUES('NULL','','')
  2.  
Código: SQL
  1. INSERT INTO ALUMNO(NOMBRE,DNI,CP) VALUES('VACIO','','')
  2.  

si creas la tabla Alumnos2 (sintaxis arriba) e intentas lo siguiente ( Atencion! : NULL es un valor especial como ya lo hemos comentado en el mensaje anterior y el sistema lo reconoce como tal, Tercera Regla de Edgar F. Codd (http://es.wikipedia.org/wiki/Sistema_de ... ores_nulos)

y por lo tanto NULL no debes de encerrarlo entre comillas, porque el sistema entiende que se trata de una cadena y no de el valor de NULL, intenta asi

Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES(NULL,'','')
  2.  
Cita de: "SQL SERVER 2005"
Msg 515, Level 16, State 2, Line 1
No se puede insertar el valor NULL en la columna 'NOMBRE', tabla 'ALUMNOS2'. La columna no admite valores NULL. Error de INSERT.
Se terminó la instrucción.

Otros ejemplos con algunas variables y funciones (!Ojo! con las comillas):

Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES('@@ServerName','','')
  2.  
Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES(@@ServerName,'','')
  2.  

Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES('Left(db_Name()+XXX,3)','','')
  2.  
Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES(LEFT(db_Name()+'XXX',3),'','')
  2.  

Si intentas insertar un valor nulo en los otros campos, no te dejaria y no porque sean parte de la llave primaria (Primary Key) sino porque se les ha negado
permitir valores nulos (Allow Nulls) (NOT NULL)

Código: SQL
  1. INSERT INTO ALUMNOS2(NOMBRE,DNI,CP) VALUES(@@ServerName,NULL,'')
  2.  

Conclusion lo que estas insertando es una cadena con la palabra 'NULL' y no el valor real de NULL

Espero que se aclare tu duda.

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

elpipo

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #4 en: Viernes 8 de Julio de 2011, 13:32 »
0
Hola muchisiiiiiiiiiiiiiimasssss gracias por la aclaración ya me extrañaba que sql server estuviera mal, el que esta mal de verdad soy yo que estoy hecho un cazurro, vuelvo a repetiros que muchísimas gracias me habéis salvado de muchos atascos que me he liado yo.
Otra pregunta que hago ya que tengo solucionado el problema gordo es como puedo poner un restricción en las columnas que no sean claves primarias para que no acepten blancos, por que en la clave primaria ya lo he puesto en el apartado de restricciones pero no me deja crear un restricción en las demás columnas solo en la clave primaria si me pudierais ayudar en esto lo agradecería, y por ultimo si tuvierais un buen manual de instalacion y utilizacion de SQL SERVER 2008 enterprise que es el que tengo tambien lo agradeceria.

De todas formas muchas gracias.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #5 en: Viernes 8 de Julio de 2011, 16:38 »
0
Para agregar restriccion a la tabla usa lo siguiente:

Código: SQL
  1.  
  2. ALTER TABLE tabla
  3. ADD CONSTRAINT CK_tabla_columna CHECK (columna <> '')
  4.  
  5.  

Solo verifica que la columna no haga conflicto con la restriccion antes de añadir la restriccion, es decir, si la columna contiene una cadena en blanco, no te dejara añadir la restriccion. Primero elimina/modifica la fila que contenga la columna que hace conflicto con la restriccion, y
entonce ya te dejara añadir la restriccion

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

aaiello

  • Nuevo Miembro
  • *
  • Mensajes: 11
  • Nacionalidad: 00
    • Ver Perfil
Re:CLAVE PRIMARIA ACEPTA VALORES NULOS
« Respuesta #6 en: Martes 16 de Agosto de 2011, 15:09 »
0
Es importante aclarar que asi como sql server no acepta null en la pk (como cualquier motor decente) tu confusion puede venir de que en sql server '' y NULL no son lo mismo, mientras que en Oracle son sinonimos.
Saludos,
-
Lic. Andrés M. Aiello
DBA MSSQL - Oracle
http://aiellodba.blogspot.com/
-
Lic. Andrés M. Aiello
DBA MSSQL - Oracle
http://aiellodba.blogspot.com/