Как скопировать индексы из одной таблицы в другую в SQL Server
Мне нужно скопировать индексы из одной таблицы в другую. Есть много индексов, и я не хочу воссоздавать их с нуля. Кажется, что подвержена ошибкам.
Я скопировал структуру, используя
SELECT * INTO [BackupTable] FROM [OriginalTable]
Но это не копирует индексы, ограничения, триггеры и т.д.
Кто-нибудь знает, как это сделать?
Ответы
Ответ 1
Вы хотите скопировать определение индекса?
Затем вы можете инвертировать индекс, триггеры и т.д., используя параметр "Script" в средстве управления Microsoft SQL
Просто щелкните правой кнопкой мыши по имени таблицы в списке таблиц SQL Management Studio и выберите "Script Таблица как", а затем "Создать в"
Вы не можете копировать данные индекса, относящиеся к физическому хранению индекса
Сначала проверьте, что у вас есть "Сервис/Параметры/Обозреватель объектов SQL/Сценарии/ Script Индексы", установленный в "Истинный". В некоторой версии SQL Management установлено значение false. инструмент (спасибо Mark)
![enter image description here]()
Ответ 2
По умолчанию таблица правого щелчка "CREATE" не включает индексы или триггеры, а только определение таблицы и ограничения.
Вы можете щелкнуть правой кнопкой мыши базу данных и нажать "Задачи" → "Сгенерировать скрипты", что позволит вам сделать это
Изменить: это значение по умолчанию, но, по словам TFD, оно может быть изменено, к счастью.
Ответ 3
Я не знаком с SQL Server, но основываясь на том, как определяются таблицы базы данных и используются в других базах данных, я бы сказал, что нет никакого способа сделать это, просто скопировав данные или используя SELECT INTO.
Индексы должны быть определены как часть структуры таблицы и должны быть сгенерированы для любых существующих данных, которые могут быть в таблице.
Единственный способ сделать это - во время инструкции CREATE TABLE с помощью инструкции ALTER TABLE после создания таблицы.
Заявления для работы с самими данными являются отдельными для работы с определениями таблиц, поэтому я не думаю, что для этого будет какая-либо работа или сокращение.
Я уверен, что для создания инструкции ALTER TABLE будут созданы инструменты для создания всех соответствующих индексов на основе уже имеющейся таблицы, что упрощает и повышает надежность.
Ответ 4
Вы можете создать script, используя информацию в sysindexes (или sys.indexes в зависимости от вашей версии), чтобы воссоздать все индексы, но использование метода Select * in также не будет собирать внешние и первичные ключи или любые расширенные свойства. Вы должны действительно изучить использование SSIS, если вы используете версию 2005+, или DTS, если вы используете 2000, у обоих есть мастера, чтобы упростить этот тип копии.
Экспорт импорта SSIS
Экспорт DTS Import
Ответ 5
Щелкните правой кнопкой мыши индекс в SSMS и сделайте script как > create.
Измените имя таблицы и имя индекса, и вы должны быть установлены
Ответ 6
Вы должны получить эту идею здесь
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