servidores - copiar tabla sql
Cómo copiar índices de una tabla a otra en SQL Server (6)
¿Quieres copiar la definición del índice?
Luego puede aplicar ingeniería inversa al índice, desencadenadores, etc. mediante la opción "Script" en la herramienta de administración de Microsoft SQL
Simplemente haga clic derecho en el nombre de una tabla en la lista de tablas de SQL Management Studio y seleccione "Script Table as" y luego "Create to"
No puede copiar los datos del índice en relación con el almacenamiento físico del índice
Primero compruebe que tiene "Herramientas / Opciones / Explorador de objetos de SQL Server / Secuencias de comandos / Índices de secuencias de comandos" configurados en "Verdadero". Esto se establece en falso en alguna versión de la herramienta de administración de SQL (gracias, marca)
Necesito copiar los índices de una tabla a otra. Hay MUCHOS índices y no quiero recrearlos desde cero. Parece error propenso de todos modos.
He copiado la estructura usando
SELECT * INTO [BackupTable] FROM [OriginalTable]
Pero eso no copia índices, restricciones, desencadenadores, etc.
¿Alguien sabe como hacer esto?
Deberías tener la idea aquí
Sub CopyTemp(tblName As String, Optional WithIndex As Boolean = False)
Dim db As DAO.Database
Dim tDefOrig As DAO.TableDef
Dim tDefNew As DAO.TableDef
Dim idxOrig As DAO.Index
Dim idxNew As DAO.Index
Dim fld As DAO.Field
Dim tempName As String
tempName = "temp" & tblName
Set db = CurrentDb
db.Execute "Select * Into " & tempName & " From " & tblName
If WithIndex = True Then
Set tDefOrig = db.TableDefs(tblName)
Set tDefNew = db.TableDefs(tempName)
For Each idxOrig In tDefOrig.Indexes
Set idxNew = tDefNew.CreateIndex(idxOrig.Name)
With idxNew
For Each fld In idxOrig.Fields
.Fields.Append .CreateField(fld.Name)
Next
.Primary = idxOrig.Primary
.Unique = idxOrig.Unique
End With
tDefNew.Indexes.Append idxNew
tDefNew.Indexes.Refresh
Next
End If
End Sub
Haga clic con el botón derecho en el índice en SSMS y haga el script como> crear.
Cambia el nombre de la tabla y el nombre del índice y deberás configurar
No estoy específicamente familiarizado con SQL Server, sin embargo, según la forma en que se definen y usan las tablas de base de datos en otras bases de datos, diría que no hay forma de hacerlo simplemente copiando los datos o utilizando un SELECT INTO.
Los índices deben definirse como parte de la estructura de la tabla y deben generarse para cualquier dato existente que pueda haber en la tabla.
La única forma de hacerlo es durante la sentencia CREATE TABLE utilizando una sentencia ALTER TABLE después de crear la tabla.
Las declaraciones para trabajar con los datos en sí están separadas de trabajar con las definiciones de la tabla, por lo que no creo que haya ninguna solución o atajo para esto.
Estoy seguro de que habría herramientas disponibles para generar la declaración ALTER TABLE para crear todos los índices apropiados basados en la tabla que ya tiene, lo que lo hace fácil y confiable.
Por defecto, la tabla de clic derecho "CREAR" no incluye los índices ni los desencadenantes, solo la definición de la tabla y las restricciones.
Puede hacer clic derecho en la base de datos y hacer clic en "Tareas" -> "Generar secuencias de comandos" que le permitirán hacer esto
Editar: este es el valor predeterminado, pero como menciona TFD, se puede cambiar, por suerte.
Puede crear una secuencia de comandos utilizando la información en sysindexes (o sys.indexes, dependiendo de su versión) para recrear todos los índices, pero utilizar el método Select * para acercarse tampoco recogerá las claves primarias y externas ni ninguna propiedad extendida. . Realmente debería considerar el uso de SSIS si está usando una versión 2005+, o DTS si está usando 2000, ambos tienen asistentes para simplificar este tipo de copia.