Utilizar índices en vistas no indexadas

01/07/2008 - 13:44 por Juan Diego Bueno | Informe spam
Buenas gente:

Ya he planteado una duda similar en un grupo de C#, pero como una parte
es tan específica del SGBD, la replanteo en este grupo.

Yo suelo utilizar vistas modificables que afectan a más de una tabla.
Suelen basarse en joins o en uniones, de forma que no las puedo crear
como indexadas.

.NET dispone de la clase SQLCommandbuilder que permite generar los
comandos de actualización, inserción y borrado para los adaptadores de
datos de forma rápida. Con el comando de inserción no hay problema,
pero sí con los de actualización y borrado. Todo ello se debe a que no
encuentra el campo o campos que debería/n de ejercer de clave
principal. Es más, creo que con sólo encontrar una restricción UNIQUE
funcionaría. El problema es que no encuentro cómo mostrar esa vista
como si fuera una tabla con sus claves. Ya he comentado por qué no
puedo utilizar vistas indexadas. ¿Alguna idea?

Saludos

http://www.moondance.es

Preguntas similare

Leer las respuestas

#6 Penta
01/07/2008 - 20:10 | Informe spam
Solo como dato, se debe tener especial cuidado en insertar datos
mediante vista esque ni alguna columna de la tabla inolucrada tiene
calculo, esta insercion no sera posible.

Atte.
Penta.
Respuesta Responder a este mensaje
#7 Juan Diego Bueno
01/07/2008 - 20:24 | Informe spam
Hola Penta:

"Penta" escribió en el mensaje de
noticias:
Solo como dato, se debe tener especial cuidado en insertar datos
mediante vista esque ni alguna columna de la tabla inolucrada tiene
calculo, esta insercion no sera posible.



Con o sin cálculos, sean o no indexadas, a mi me van de lujo. Cuando hablo
de su potencia me refiero a que sigo trabajando con vistas como si fueran
tablas y a que me permiten hacer lo mismo que con ellas y de la misma forma.
Cambio una query sobre dos tablas con un join por una query sobre una vista
que ya las incluye.

La inserción de datos en las vistas se hace mediante triggers "instead of"
en los que ya me cuido de hacer las inserciones en las tablas
correspondientes. Otra de las ventajas (que yo aún no utilizo, por cierto)
es que se pueden dar permisos sobre estas vistas sin tener que darlos sobre
las tablas base. Es un tema que ya se ha discutido mucho por aquí y tiene
sus adeptos. Pero bueno, el problema en este caso es poder conseguir que de
alguna manera pueda verlas .NET como algo más que vistas. Supongo que es un
problema más de la plataforma y por lo que veo, no hay una opción válida en
SQL Server que me lo solucione.

Supongo que tendré que construirme mi propio commandbuilder (lo cual tampoco
parece excesivamente complicado).

Saludos
Respuesta Responder a este mensaje
#8 Eduardo
02/07/2008 - 01:27 | Informe spam
"Juan Diego Bueno" escribió en el mensaje
news:
Hola Eduardo:

En un mensaje anterior, Eduardo ha escrito :
Podrias personalizar el CB para ese caso especifico es decir indicar
explicitamente el comando



Bueno, más bien sería personalizar el dataadapter, ya que una vez que
obtengo los comandos del commandbuilder, la idea es llevarlos al
dataadapter y destruirlo. Así es como estoy haciendo ahora, pero quería
quitarme el trabajo de tener que generar los comandos a capón. Al menos
puedo aprovechar el insertcommand


o en su defecto indicar explicitamente en C# cuales
son las columnas que conforman la PK con la propiedad PrimaryKey del
datatable.



Esto lo he probado y no funciona. Es a nivel de datatable y por lo visto,
lo que necesito es a nivel de servidor de base de datos.




Si no, otra forma de personalizarlo es crear tu propio commandbuilder. No es
muy dificil armar las cadenas de cada comando insert, update y delete con un
stringbuilder y recorriendo la coleccion Columns del datatable.
Alli tendrias por ejemplo la libertad de modificar primero la coleccion
PrimaryKey (cuando sea necesario) y basarte en ella para construir los
where's en los casos de update o delete.
Respuesta Responder a este mensaje
#9 Alfredo Novoa
02/07/2008 - 04:54 | Informe spam
Hola Juan Diego,

El Tue, 01 Jul 2008 13:44:22 +0200, Juan Diego Bueno escribió:

funcionaría. El problema es que no encuentro cómo mostrar esa vista
como si fuera una tabla con sus claves. Ya he comentado por qué no
puedo utilizar vistas indexadas. ¿Alguna idea?



La obvia es que no uses CommandBuilder. Entre otras muchas cosas podrías
mirar el código del CommandBuilder y arreglar ese fallo, o crearte tu
propio CommandBuilder partiendo de 0.


Saludos
Alfredo
Respuesta Responder a este mensaje
#10 Alfredo Novoa
02/07/2008 - 04:54 | Informe spam
Hola Penta,

El Tue, 1 Jul 2008 11:07:04 -0700 (PDT), Penta escribió:

Yo diria mas bien que solo es comodo, no hay duda, pero potente ?? no
creo, ya ves que son en vistas NO indexadas.



No he entendido nada de la última frase.


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