Consulta - Columna Index

06/07/2006 - 00:00 por Ricardo Uribe | Informe spam
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias

Preguntas similare

Leer las respuestas

#1 qwalgrande
06/07/2006 - 08:00 | Informe spam
Hola.

Busca en los BOL por vistas indexadas. Necesitas crear una vista ligada al
esquema y definir un índice que sea único. Es como si fuera una tabla, en la
que tuvieras que definir una clave primaria para luego poder definir más
índices.

Sin embargo, para tu caso, veo que quieres actualizar una vista. Si bien se
puede, ¿no te sería más sencillo actualizar directamente la tabla?

Alberto López Grande (qwalgrande)


"Ricardo Uribe" escribió en el mensaje
news:
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias










Respuesta Responder a este mensaje
#2 Ricardo Uribe
06/07/2006 - 17:03 | Informe spam
Bueno explicando el porque, es porque en la
segunda tabla solo tengo los codigos de algunos

empleados que son Instaladores y no queria

poner esas columnas en la tabla de empleados.

Respondiendo a Jorge, no entiendo porque en

la vista tengo que poner las dos columnas principales

de cada tabla, supongo que poniendo una de ellas

es suficiente.

Gracias por su ayuda.

Seguire intentando. :-)

CREATE TABLE [dbo].[Empleado] (

[CodigoEmpleado] [smallint] NOT NULL ,

[Nombres] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

[Apellidos] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

) ON [PRIMARY]

CREATE TABLE [dbo].[PagoInstaladores] (

[CodigoInstalador] [smallint] NOT NULL ,

[PorHoraSoles] [float] NOT NULL ,

[PorHoraDolares] [float] NOT NULL

) ON [PRIMARY]



CREATE VIEW Instaladores

WITH SCHEMABINDING

AS

SELECT dbo.PagoInstaladores.CodigoInstalador AS Codigo,

dbo.Empleado.Nombres + ' ' + dbo.Empleado.Apellidos AS Nombres,

dbo.PagoInstaladores.PorHoraSoles AS [Por Hora S/],

dbo.PagoInstaladores.PorHoraDolares AS [Por Hora $]

FROM dbo.PagoInstaladores INNER JOIN dbo.Empleado ON

dbo.PagoInstaladores.CodigoInstalador = dbo.Empleado.CodigoEmpleado

"Jorge Gonzalez" escribió en el mensaje
news:
Con el permiso de qwalgrande,

Las vistas no son la mejor manera de actualizar datos, pero a veces son
una forma cómoda. Asi que adelante. Sin embargo las restricciones son
bastantes.

Un prerequisito indispensable es que la vista debe contener las llaves
primarias de ambas tablas. De no ser así, SQL SERVER no tendrá la
información suficiente "en la vista" para encontrar el registro a
actualizar "en la o las tablas" y realizar el UPDATE.

Revisá esto y nos contás. Es una posibilidad !!!!

Si no te funciona. tal vez podés mandar los scripts de creación de las
2 tablas y de la vista y la analizamos.

Saludos

Jorge González


"Ricardo Uribe" escribió en el mensaje
news:
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias














Respuesta Responder a este mensaje
#3 Jorge Gonzalez
06/07/2006 - 17:19 | Informe spam
Con el permiso de qwalgrande,

Las vistas no son la mejor manera de actualizar datos, pero a veces son una
forma cómoda. Asi que adelante. Sin embargo las restricciones son bastantes.

Un prerequisito indispensable es que la vista debe contener las llaves
primarias de ambas tablas. De no ser así, SQL SERVER no tendrá la
información suficiente "en la vista" para encontrar el registro a actualizar
"en la o las tablas" y realizar el UPDATE.

Revisá esto y nos contás. Es una posibilidad !!!!

Si no te funciona. tal vez podés mandar los scripts de creación de las 2
tablas y de la vista y la analizamos.

Saludos

Jorge González


"Ricardo Uribe" escribió en el mensaje
news:
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias










Respuesta Responder a este mensaje
#4 Jorge Gonzalez
06/07/2006 - 18:31 | Informe spam
Estimado Ricardo,

No sé si fue por omisión pero los scripts que mandaste no incluyen llave
primaria en ninguna de las tablas. Aunque resulta obvio que la llave sea el
código.

Tenés razón en comentar que es suficiente con una sola llave primaria, pero
eso es en tu caso donde las 2 tablas tienen una llave primaria de 1 solo
campo y es ese el campo que las une. Hay otros casos donde la relación se da
a través de campos que no son la llave primaria y es ahí donde es requerido
que las llaves de las 2 tablas estén presente en la vista

He creado las tablas y la vista y he actualizado datos sin problemas en la
vista desde el query analizer y desde el Enterprise Manager. Definitivamente
no es posible insertar datos en la vista debido a su propia definición, pero
la actualización la he logrado sin problemas.

El problema te resulta desde una aplicación cliente? En tal caso hay que ver
el método de acceso que estás utilizando.


Saludos



"Ricardo Uribe" escribió en el mensaje
news:
Bueno explicando el porque, es porque en la
segunda tabla solo tengo los codigos de algunos

empleados que son Instaladores y no queria

poner esas columnas en la tabla de empleados.

Respondiendo a Jorge, no entiendo porque en

la vista tengo que poner las dos columnas principales

de cada tabla, supongo que poniendo una de ellas

es suficiente.

Gracias por su ayuda.

Seguire intentando. :-)

CREATE TABLE [dbo].[Empleado] (

[CodigoEmpleado] [smallint] NOT NULL ,

[Nombres] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

[Apellidos] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

) ON [PRIMARY]

CREATE TABLE [dbo].[PagoInstaladores] (

[CodigoInstalador] [smallint] NOT NULL ,

[PorHoraSoles] [float] NOT NULL ,

[PorHoraDolares] [float] NOT NULL

) ON [PRIMARY]



CREATE VIEW Instaladores

WITH SCHEMABINDING

AS

SELECT dbo.PagoInstaladores.CodigoInstalador AS Codigo,

dbo.Empleado.Nombres + ' ' + dbo.Empleado.Apellidos AS Nombres,

dbo.PagoInstaladores.PorHoraSoles AS [Por Hora S/],

dbo.PagoInstaladores.PorHoraDolares AS [Por Hora $]

FROM dbo.PagoInstaladores INNER JOIN dbo.Empleado ON

dbo.PagoInstaladores.CodigoInstalador = dbo.Empleado.CodigoEmpleado

"Jorge Gonzalez" escribió en el mensaje
news:
Con el permiso de qwalgrande,

Las vistas no son la mejor manera de actualizar datos, pero a veces son
una forma cómoda. Asi que adelante. Sin embargo las restricciones son
bastantes.

Un prerequisito indispensable es que la vista debe contener las llaves
primarias de ambas tablas. De no ser así, SQL SERVER no tendrá la
información suficiente "en la vista" para encontrar el registro a
actualizar "en la o las tablas" y realizar el UPDATE.

Revisá esto y nos contás. Es una posibilidad !!!!

Si no te funciona. tal vez podés mandar los scripts de creación de
las 2 tablas y de la vista y la analizamos.

Saludos

Jorge González


"Ricardo Uribe" escribió en el mensaje
news:
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias


















Respuesta Responder a este mensaje
#5 Ricardo Uribe
06/07/2006 - 18:37 | Informe spam
Pues es desde una aplicacion en VB, tengo un modulo que carga cualquier
tabla o vista y le crea cajas de texto para cada columna, con opciones de
modificacion, eliminacion y insercion de filas.

Tienes razon, tambien he probado desde el Enterprise Manager y me
dejo actualizar.

Tendre que probar en la aplicacion y buscar que es lo que falta.

Muchas gracias por su tiempo.

"Jorge Gonzalez" escribió en el mensaje
news:
Estimado Ricardo,

No sé si fue por omisión pero los scripts que mandaste no incluyen llave
primaria en ninguna de las tablas. Aunque resulta obvio que la llave sea
el código.

Tenés razón en comentar que es suficiente con una sola llave primaria,
pero eso es en tu caso donde las 2 tablas tienen una llave primaria de 1
solo campo y es ese el campo que las une. Hay otros casos donde la
relación se da a través de campos que no son la llave primaria y es ahí
donde es requerido que las llaves de las 2 tablas estén presente en la
vista

He creado las tablas y la vista y he actualizado datos sin problemas en la
vista desde el query analizer y desde el Enterprise Manager.
Definitivamente no es posible insertar datos en la vista debido a su
propia definición, pero la actualización la he logrado sin problemas.

El problema te resulta desde una aplicación cliente? En tal caso hay que
ver el método de acceso que estás utilizando.


Saludos



"Ricardo Uribe" escribió en el mensaje
news:
Bueno explicando el porque, es porque en la
segunda tabla solo tengo los codigos de algunos

empleados que son Instaladores y no queria

poner esas columnas en la tabla de empleados.

Respondiendo a Jorge, no entiendo porque en

la vista tengo que poner las dos columnas principales

de cada tabla, supongo que poniendo una de ellas

es suficiente.

Gracias por su ayuda.

Seguire intentando. :-)

CREATE TABLE [dbo].[Empleado] (

[CodigoEmpleado] [smallint] NOT NULL ,

[Nombres] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

[Apellidos] [nvarchar] (50) COLLATE Modern_Spanish_CI_AS NULL ,

) ON [PRIMARY]

CREATE TABLE [dbo].[PagoInstaladores] (

[CodigoInstalador] [smallint] NOT NULL ,

[PorHoraSoles] [float] NOT NULL ,

[PorHoraDolares] [float] NOT NULL

) ON [PRIMARY]



CREATE VIEW Instaladores

WITH SCHEMABINDING

AS

SELECT dbo.PagoInstaladores.CodigoInstalador AS Codigo,

dbo.Empleado.Nombres + ' ' + dbo.Empleado.Apellidos AS Nombres,

dbo.PagoInstaladores.PorHoraSoles AS [Por Hora S/],

dbo.PagoInstaladores.PorHoraDolares AS [Por Hora $]

FROM dbo.PagoInstaladores INNER JOIN dbo.Empleado ON

dbo.PagoInstaladores.CodigoInstalador = dbo.Empleado.CodigoEmpleado

"Jorge Gonzalez" escribió en el mensaje
news:
Con el permiso de qwalgrande,

Las vistas no son la mejor manera de actualizar datos, pero a veces son
una forma cómoda. Asi que adelante. Sin embargo las restricciones son
bastantes.

Un prerequisito indispensable es que la vista debe contener las llaves
primarias de ambas tablas. De no ser así, SQL SERVER no tendrá la
información suficiente "en la vista" para encontrar el registro a
actualizar "en la o las tablas" y realizar el UPDATE.

Revisá esto y nos contás. Es una posibilidad !!!!

Si no te funciona. tal vez podés mandar los scripts de creación de
las 2 tablas y de la vista y la analizamos.

Saludos

Jorge González


"Ricardo Uribe" escribió en el mensaje
news:
Hola grupo, espero me puedan ayudar.



Tengo una consulta la cual proviene de

2 tablas, ahora quiero actualizar una

de ellas desde la consulta, cuando lo

intento me sale "Información de columna

clave insuficienteetc."



Entonces comencé a leer y me decía que

necesitaba crear un índice y para eso que mi

consulta tenia que tener ciertos requisitos

pues llegue hasta la parte de crear la vista con

SCHEMABINDING, pero cuando quiero

crear el índice me dice "No se puede crear índice

en la vista X. No tiene un índice

agrupado único."



Bueno busque mas información pero no he

podido encontrar nada mas.

Por lo mismo me atrevo a pedir su ayuda.



Muchas gracias






















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