数据库项目中的批量更改列默认值
Posted
技术标签:
【中文标题】数据库项目中的批量更改列默认值【英文标题】:Mass change column default values in database project 【发布时间】:2015-01-27 20:23:39 【问题描述】:我有一个 Visual Studio 2013 数据库项目,我想将默认为 newid()
的所有 GUID 列更改为 newsequentialid()
。
使用以下查询来识别列:
SELECT so.name AS table_name,
sc.name AS column_name,
sm.text AS default_value
FROM sys.sysobjects so
JOIN sys.syscolumns sc ON sc.id = so.id
LEFT JOIN sys.syscomments SM ON sm.id = sc.cdefault
WHERE so.xtype = 'U'
AND sm.text = '(newid())'
ORDER BY so.[name], sc.colid
62个表共有62列。
除了逐个访问每个表定义并更改默认值之外,还有其他方法可以在 Visual Studio 中执行此操作吗?
【问题讨论】:
如果该查询为您提供了表名,那么您可以动态构建alter
语句以循环更改表。例如'alter table ' + result.tablename + ' change ....'
这将改变位于数据库服务器上的实际数据库,而不是构成数据库项目的 .sql 文件。
在项目中的所有 *.sql 文件中查找和替换将可以在项目中执行此操作。不过,不确定它将如何处理对服务器的更改。我会先尝试查找/替换,然后看看您是否需要以某种方式调整重构日志以处理重构。
在文件中查找和替换正是我想要的。对服务器的更改是通过模式比较或发布脚本完成的,因此 Visual Studio 负责编写删除/重新创建命名约束的脚本。
【参考方案1】:
在项目中的所有 *.sql 文件中查找和替换可以在项目中执行此操作。我会先尝试查找/替换,然后看看您是否需要以某种方式调整重构日志以处理重构。
【讨论】:
以上是关于数据库项目中的批量更改列默认值的主要内容,如果未能解决你的问题,请参考以下文章