需要更改生产数据库中的列类型(SQL Server 2005)

fra*_*lic 0 sql sql-server transactions sql-server-2005

我需要帮助编写TSQL脚本来修改两列的数据类型.

我们正在更改两列:

  • uniqueidentifier - > varchar(36)***具有主键约束
  • xml - > nvarchar(4000)

我主要担心的是脚本的生产部署......

该表由一个公共网站主动使用,每小时可获得数千次点击.因此,我们需要脚本快速运行,而不会影响前端的服务.此外,如果发生错误,我们需要能够自动回滚事务.

幸运的是,该表只包含大约25行,所以我猜测更新会很快.

该数据库是SQL Server 2005.

(仅供参考 - 由于第三方工具与SQL Server的xml和uniqueidentifier类型不兼容,因此需要更改类型.我们已经测试了dev中的更改,并且更改没有任何功能问题.)

Dol*_*ras 6

正如David所说,在生产数据库中执行脚本而不进行备份或停止站点不是最好的想法,也就是说,如果您只想在一个行数减少的表中进行更改,则可以准备脚本到:

  • 开始交易
  • 创建一个具有所需最终结构的新表.
  • 将数据从原始表复制到新表
  • 例如,将旧表重命名为original_name_old
  • 将新表重命名为original_table_name
  • 结束交易

这将以一个名为原始表但具有所需新结构的表结束,此外,您还使用备份名称维护原始表,因此如果要回滚更改,可以创建一个脚本来执行简单地删除新表并重命名原始表.

如果表具有外键,则脚本会稍微复杂一些,但仍然可能没有太多工作.