我有一张约1000万行的桌子.我们刚从sql Server Management Studio从另一个数据库导入它.它创建表,但在主键列上没有标识和主键.
我可以添加主键,但不能添加身份.当我在设计师这样做的时候,这一直是超时的.即使我将超时设置设置为0.
我需要创建大概另一个列集主键和身份,从旧的复制数据,删除旧列并重新命名新的列.
任何人都可以告诉我,如果没有额外的过热,那么最好的办法是做这样的大桌子呢?
解决方法
您不能将IDENTITY添加到现有列.它根本无法做到.
您将需要创建一个类型为INT IDENTITY的新列,然后删除不再需要的旧列(并且可能将新列重命名为旧名称 – 如果需要)
另外:我不会在视觉设计器中这样做 – 这将尝试用新结构重新创建表,复制所有数据(全部为10万行),然后删除旧表.
使用直接T-sql语句更有效率 – 这将执行“就地”更新,非破坏性(无数据丢失),并且不需要在该进程中复制大约1000万行. .
ALTER TABLE dbo.YourTable ADD NewID INT IDENTITY(1,1) NOT NULL
当您添加一个类型为INT IDENTITY的新列到表中时,将自动填充连续的数字.您不能阻止这种情况发生,您也不能在以后更新值.
这些选项都不是非常有用的,最终你可能会得到不同的ID值….要做到这一点,你必须:
>提前创建新表,结构正确,IDENTITY已经到位
>然后在该表上打开SET IDENTITY_INSERT(yourtable)ON,以允许将值插入到标识列中
>从原始来源复制此数据
>再次关闭身份插入:SET IDENTITY_INSERT(yourtable)OFF