UNIQUE: usar resctricción o indice

18/11/2004 - 12:51 por Jose Luis | Informe spam
En una tabla, (facturas en este caso), he creado un indice unico por los
campos Serie y NumFactura, la duda me surge en las opciones que tiene la
ventana de creacion de indices del Enterprise Manager, en concreto al crear
un indice UNIQUE tienes dos opciones: Restricción y Indice.
Que diferencia hay entre estas dos opciones ?
Si elijo la opcion indice ademas puedo marcar la casilla 'Pasar por alto
claves duplicadas'
Que significa esta nueva opcion?.
Que ignora las filas de la tabla con clave duplicada.y las desecha sin
ningun mensaje de error.?
O las incuye en la tabla pero no en el indice.?

No acabo de aclararme con estas opciones, hasta que empece con mssql un
indice unico era eso 'un indice unico' y ya esta., si el usuario o un
proceso intenta modificar o insertar una fila que crea un duplicado, la base
de datos envia un error al programa acerca de este error que el programador
(yo) debe tratar en su aplicacion, asi de sencillo.

Podria alguien aclararme este tema.?

Gracias.

Preguntas similare

Leer las respuestas

#1 Liliana Sorrentino
18/11/2004 - 17:31 | Informe spam
Hola Jose Luis,
Si no necesitás tener ordenado un dato, pero sí querés controlar que sea
único, la restricción es lo indicado, que además permite nulos.

Acá te mando un ejemplo de cómo funciona 'Pasar por alto claves duplicadas'

drop table Tabla1
GO

CREATE TABLE Tabla1
(nro smallint NOT NULL ,
nombre char(30) NOT NULL ,
ss char(10) NOT NULL)
GO

CREATE UNIQUE INDEX Tabla1_idx ON Tabla1(nro) WITH IGNORE_DUP_KEY
GO

insert Tabla1
select 1, 'Juan', 10 union all
select 2, 'Luis', 20 union all
select 1, 'Martin', 30
select * from tabla1

Servidor: mensaje 3604, nivel 16, estado 1, línea 2
Clave duplicada omitida.
nro nombre ss
-
1 lili 10
2 lili 20


drop table Tabla1
GO

CREATE TABLE Tabla1
(nro smallint NOT NULL ,
nombre char(30) NOT NULL ,
ss char(10) NOT NULL)
GO

CREATE UNIQUE INDEX Tabla1_idx ON Tabla1(nro)
GO

insert tabla1
select 1, 'Juan', 10 union all
select 2, 'Luis', 20 union all
select 1, 'Martin', 30
select * from tabla1

Servidor: mensaje 2601, nivel 14, estado 3, línea 2
No se puede insertar una fila de claves duplicadas en el objeto 'Tabla1' con
índice único 'Tabla1_idx'.
Se terminó la instrucción.
nro nombre ss
-


"Jose Luis" escribió en el mensaje
news:#
En una tabla, (facturas en este caso), he creado un indice unico por los
campos Serie y NumFactura, la duda me surge en las opciones que tiene la
ventana de creacion de indices del Enterprise Manager, en concreto al


crear
un indice UNIQUE tienes dos opciones: Restricción y Indice.
Que diferencia hay entre estas dos opciones ?
Si elijo la opcion indice ademas puedo marcar la casilla 'Pasar por alto
claves duplicadas'
Que significa esta nueva opcion?.
Que ignora las filas de la tabla con clave duplicada.y las desecha sin
ningun mensaje de error.?
O las incuye en la tabla pero no en el indice.?

No acabo de aclararme con estas opciones, hasta que empece con mssql un
indice unico era eso 'un indice unico' y ya esta., si el usuario o un
proceso intenta modificar o insertar una fila que crea un duplicado, la


base
de datos envia un error al programa acerca de este error que el


programador
(yo) debe tratar en su aplicacion, asi de sencillo.

Podria alguien aclararme este tema.?

Gracias.




Respuesta Responder a este mensaje
#2 Jose Luis
18/11/2004 - 19:20 | Informe spam
Muchas gracias Liliana, muy claro el ejemplo.


"Liliana Sorrentino" escribió en el mensaje
news:
Hola Jose Luis,
Si no necesitás tener ordenado un dato, pero sí querés controlar que sea
único, la restricción es lo indicado, que además permite nulos.

Acá te mando un ejemplo de cómo funciona 'Pasar por alto claves


duplicadas'

drop table Tabla1
GO

CREATE TABLE Tabla1
(nro smallint NOT NULL ,
nombre char(30) NOT NULL ,
ss char(10) NOT NULL)
GO

CREATE UNIQUE INDEX Tabla1_idx ON Tabla1(nro) WITH IGNORE_DUP_KEY
GO

insert Tabla1
select 1, 'Juan', 10 union all
select 2, 'Luis', 20 union all
select 1, 'Martin', 30
select * from tabla1

Servidor: mensaje 3604, nivel 16, estado 1, línea 2
Clave duplicada omitida.
nro nombre ss
-
1 lili 10
2 lili 20


drop table Tabla1
GO

CREATE TABLE Tabla1
(nro smallint NOT NULL ,
nombre char(30) NOT NULL ,
ss char(10) NOT NULL)
GO

CREATE UNIQUE INDEX Tabla1_idx ON Tabla1(nro)
GO

insert tabla1
select 1, 'Juan', 10 union all
select 2, 'Luis', 20 union all
select 1, 'Martin', 30
select * from tabla1

Servidor: mensaje 2601, nivel 14, estado 3, línea 2
No se puede insertar una fila de claves duplicadas en el objeto 'Tabla1'


con
índice único 'Tabla1_idx'.
Se terminó la instrucción.
nro nombre ss
-


"Jose Luis" escribió en el mensaje
news:#
> En una tabla, (facturas en este caso), he creado un indice unico por los
> campos Serie y NumFactura, la duda me surge en las opciones que tiene la
> ventana de creacion de indices del Enterprise Manager, en concreto al
crear
> un indice UNIQUE tienes dos opciones: Restricción y Indice.
> Que diferencia hay entre estas dos opciones ?
> Si elijo la opcion indice ademas puedo marcar la casilla 'Pasar por alto
> claves duplicadas'
> Que significa esta nueva opcion?.
> Que ignora las filas de la tabla con clave duplicada.y las desecha sin
> ningun mensaje de error.?
> O las incuye en la tabla pero no en el indice.?
>
> No acabo de aclararme con estas opciones, hasta que empece con mssql un
> indice unico era eso 'un indice unico' y ya esta., si el usuario o un
> proceso intenta modificar o insertar una fila que crea un duplicado, la
base
> de datos envia un error al programa acerca de este error que el
programador
> (yo) debe tratar en su aplicacion, asi de sencillo.
>
> Podria alguien aclararme este tema.?
>
> Gracias.
>
>
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida