将所有计算列更改为持久化

时间:2014-08-15 18:59:19

标签: sql-server sql-server-2008 calculated-columns persisted-column

我有以下查询来检查我的数据库的哪些列是计算的而不是持久的

select t.name, c.name
from sys.tables t
inner join sys.computed_columns c on c.object_id = t.object_id
where c.is_persisted = 0

是否有任何简单的查询可以将所有这些列更新为持续存储?

1 个答案:

答案 0 :(得分:2)

您可以使用上面的查询来创建执行以下操作的脚本:

SELECT schemas.name
     , all_objects.name
     , 'ALTER TABLE ' + QUOTENAME( schemas.name ) + '.' + QUOTENAME( all_objects.name ) + ' ALTER COLUMN ' + QUOTENAME( computed_columns.name ) + ' ADD PERSISTED;'
 FROM sys.schemas
 INNER JOIN sys.all_objects
    ON schemas.schema_id = all_objects.schema_id
 INNER JOIN sys.computed_columns
    ON all_objects.object_id = computed_columns.object_id
   AND computed_columns.is_persisted = 0;

可以找到alter table定义http://msdn.microsoft.com/en-us/library/ms190273.aspx

请注意持久列(非确定性函数等)的限制可能会导致部分脚本失败。