【发布时间】: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 负责编写删除/重新创建命名约束的脚本。
标签: visual-studio-2013 default database-project