Ger*_*man 11 sql sql-server sql-server-2008
我有一张大约1000万行的表.我们刚从SQL Server Management Studio的另一个数据库导入它.它创建表但主键列上没有标识和主键.
我可以添加主键但无法添加标识.当我在设计师中做这件事的时候,它一直都是超时的.即使我将时间设置为0.
我需要创建另一个列集主键和标识,从旧复制数据,删除旧列并重命名新列.
任何人都可以告诉我这样的大桌子最好的方法是什么,没有额外的过热?
mar*_*c_s 12
您无法添加IDENTITY到现有列.它无法完成.
您需要创建一个新类型的列,INT IDENTITY 然后删除不再需要的旧列(并可能将新列重命名为旧名称 - 如果需要)
另外:我不会在可视化设计器中执行此操作 - 这将尝试使用新结构重新创建表,复制所有数据(所有10百万行),然后删除旧表.
它更有效地使用直T-SQL语句-这将做一个"就地"升级,非破坏性的(没有数据丢失),它并不需要大约10个百万行复制的过程中.. .
ALTER TABLE dbo.YourTable
ADD NewID INT IDENTITY(1,1) NOT NULL
Run Code Online (Sandbox Code Playgroud)
当您INT IDENTITY向表中添加新类型的列时,它将自动填充连续的数字.您无法阻止这种情况发生,您也无法在以后更新这些值.
这些选项都不是真的非常有用,最终 - 你最终可能会得到不同的ID值....要做到这一点,你必须:
IDENTITY已经到位SET IDENTITY_INSERT (yourtable) ON该表以允许将值插入标识列SET IDENTITY_INSERT (yourtable) OFF 只有使用这种方法,您才能在新表的IDENTITY列中获得相同的ID.
好的。我能够向包含 1000 万条记录的现有主列添加标识。我花了大约30分钟。
步骤:
将数据库更改为单用户模式(以确保没有其他数据库连接,可能导致锁定)
在设计器模式下打开表
做出改变。不要保存
单击“生成更改脚本”按钮(通常位于对象资源管理器的左上方)
执行脚本
完毕。现在你的专栏有了身份:)
| 归档时间: |
|
| 查看次数: |
35310 次 |
| 最近记录: |