Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Crear Indice en Multiples Tablas y Servers

Estas en el tema de Crear Indice en Multiples Tablas y Servers en el foro de SQL Server en Foros del Web. Hola como estan. Les hago una consulta. Tengo la necesidad de crear un nuevo índice para una tabla y campo, es algo bastante simple la ...
  #1 (permalink)  
Antiguo 23/10/2018, 08:14
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 6 meses
Puntos: 2
Crear Indice en Multiples Tablas y Servers

Hola como estan. Les hago una consulta.
Tengo la necesidad de crear un nuevo índice para una tabla y campo, es algo bastante simple la verdad y lo estoy logrando para una base de datos.
El problema es que tengo tres servidores y cerca de 40 bases de datos por servidor, por lo cual desarrolle un script con manejo de cursor para que al correrlo ejecute la creación del índice en cada server y base de datos.
Lo que hace el script es armar una tabla temporal concatenando servidor y base de datos dentro de una variable y ejecutar el create index por cada iteración.

Este funciona:

CREATE INDEX ix_Fecha ON Compras (FechaHora)

Con el script no funciona:

CREATE INDEX ix_Fecha ON @Base (FechaHora)

El valor de @base es: nombreServer.nombreBase.dbo.nombreTabla

Logro hacerlo funcionar cuando estoy en cada servidor para las bases de datos que tiene almacenadas.

El error que me da es:
The object name 'SERVER.BASE.dbo.Tabla' contains more than the maximum number of prefixes. The maximum is 2.

En la consulta cada nombre esta dentro de corchetes [SERVER].[BASE]
Y dentro de una variable:
Cita:
SET @querySQL = 'CREATE INDEX ix_Fecha ON '+@Base+'';
EXEC sp_executesql @querySQL

Alguna idea?

Última edición por Huasi; 23/10/2018 a las 08:34
  #2 (permalink)  
Antiguo 23/10/2018, 08:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Crear Indice en Multiples Tablas y Servers

Para crear un indice tienes que estar en el servidor no vas a poder hacerlo de 4 partes solo acepta a lo mucho 3 (base.schema.tabla), te recomiendo usar powershell para implementar estos queries en multiples servidores


CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]
[ ON { partition_scheme_name ( column_name )
| filegroup_name
| default
}
]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

[ ; ]

<object> ::=
{
[ database_name. [ schema_name ] . | schema_name. ]
table_or_view_name
}
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 23/10/2018, 11:08
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Crear Indice en Multiples Tablas y Servers

Que pedazo de mamerto, como no se me ocurrio antes!!
Ya lo solucioné corriendo tres veces el script, es decir uno por servidor.
Pero si al principio le agregaba

Código SQL:
Ver original
  1. USE @Base

Se me hace que podría haber funcionado.
Ahora estoy agregando una tabla de esa forma y está saliendo bien.

Saludos y gracias.

Etiquetas: indice, multiples, servers, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:46.