データベースのどの列が計算され、永続化されていないかを確認する次のクエリがあります
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
これらすべての列を更新して永続化する簡単なクエリはありますか?
データベースのどの列が計算され、永続化されていないかを確認する次のクエリがあります
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
これらすべての列を更新して永続化する簡単なクエリはありますか?
上記のクエリを使用して、次のようなスクリプトを作成できます。
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;
変更テーブルの定義はhttp://msdn.microsoft.com/en-us/library/ms190273.aspxにあります。
永続化された列 (非決定論的関数など) の制限により、スクリプトの一部が失敗する可能性があることに注意してください。