我需要将一个表的索引复制到另一个表。这里有许多索引,我不想从头开始重新创建它们,这样也容易出错。
我已经使用了
SELECT * INTO [BackupTable] FROM [OriginalTable]
但是这样并不会复制索引、约束和触发器等内容。
有没有人知道怎么做?
我需要将一个表的索引复制到另一个表。这里有许多索引,我不想从头开始重新创建它们,这样也容易出错。
我已经使用了
SELECT * INTO [BackupTable] FROM [OriginalTable]
但是这样并不会复制索引、约束和触发器等内容。
有没有人知道怎么做?
你想复制索引定义吗?
那么,您可以使用Microsoft SQL管理工具中的“脚本”选项来反向工程化索引、触发器等。
只需在SQL管理工作室表列表中右键单击表名,然后选择“脚本表为”,再选择“创建到”即可。
您无法复制与索引的物理存储相关的索引数据。
首先检查您是否将“工具/选项/SQL Server对象资源管理器/脚本/脚本索引”设置为“True”。某些版本的SQL管理工具中将其设置为false(感谢Mark)。
默认情况下,右键单击表格“CREATE”不包括索引或触发器,仅包括表定义和约束。
您可以右键单击数据库,然后单击“任务” ->“生成脚本”,以允许您执行此操作。
编辑:TFD提到这是默认设置,但可以更改,谢天谢地。
在SSMS中右键点击索引,选择生成脚本>创建.
更改表名和索引名称,然后应该就可以了。
你应该明白这里的意思
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