我们能否在SQL Server table@Production environment中删除并重新创建主键?我们是必须关闭服务器,还是可以现场操作?
我们能否在生产环境中删除并重新创建SQL Server表中的复合主键?我们是要关闭服务器,还是可以现场操作我们能否在SQL Server table@Production environment中删除并重新创建主键?我们是必须关闭服务器,还是可以现场操作?,sql,sql-server,sql-server-2005,sql-server-2008-r2,sql-server-2012,Sql,Sql Server,Sql Server 2005,Sql Server 2008 R2,Sql Server 2012,我们能否在生产环境中删除并重新创建SQL Server表中的复合主键?我们是要关闭服务器,还是可以现场操作 因为我们必须向主键添加更多列。如果我们在live中这样做,我们必须面对哪些问题?您可以从表中删除主键。如果您没有在其他列中明确提到,这也将删除该表的聚集索引 要删除主键,请运行下面的查询 -- Drop CHECK CONSTRAINT from the table ALTER TABLE /*schema*/./*table*/ DROP CONSTRAINT
因为我们必须向主键添加更多列。如果我们在live中这样做,我们必须面对哪些问题?您可以从表中删除主键。如果您没有在其他列中明确提到,这也将删除该表的聚集索引 要删除主键,请运行下面的查询
-- Drop CHECK CONSTRAINT from the table
ALTER TABLE /*schema*/./*table*/
DROP CONSTRAINT /*constraint_name*/
GO
要添加主键,请运行以下代码
-- Add a new CHECK CONSTRAINT to the table
ALTER TABLE /*schema*/./*table*/
ADD CONSTRAINT /*contraint_name*/ /*constraint_type*/ (/*constraint_column_name*/ /*logical_expression*/)
GO
关于这个主题有更多的文章。你为什么不能用谷歌搜索它?当索引丢失时,这当然会使查询速度变慢+有人可能会创建一个违反它的行-这对你来说是不是一个问题,我们无法真正回答,而你甚至没有提到表有多大。没有真正检查创建什么。。。由于drop_existing=on在后台运行,可能helpstable有5亿多条记录我们可以做到。但我担心的是,这必须在生产环境中完成。那么对另一个处于活动状态的操作有什么影响呢?我运行了一个快速测试,打开一个事务,从表中选择所有行,然后休眠10秒,运行drop和create约束语句,然后再次选择并休眠10秒,然后回滚该事务。没有阻塞,选择代码不受影响。然后我试着从。。。改为使用xlock,alter脚本在运行之前等待了整整20秒,即它们确实在我显式打开的锁上被阻止。注意:我没有测试任何写案例。