SQL Server 2005/2008 R2 を使用しています
私のSQLスクリプトは次のとおりです。
UPDATE MyView
SET MyColumn = 'My new value'
WHERE ID = 7
エラーメッセージ:
メッセージ 271、レベル 16、状態 1、行 1
列 "MyColumn" は、計算列であるか、UNION 演算子の結果であるため、変更できません。
私はそれMyColumn
がベーステーブルから計算された列であることを知っています(FullName
から計算されたときのようにLastName + ', ' + FirstName
)
私の目的は、スクリプトが実行され続けるようにエラーをキャッチすることです。
次のスクリプトを試してみましたが、うまくいきませんでした。エラーはキャッチされません:
BEGIN TRY
UPDATE MyView
SET MyColumn = 'My new value'
WHERE ID = 7
END TRY
BEGIN CATCH
-- Error occurred while updating view. The script will keep running
END CATCH
問題を解決しようとして、次のスクリプトを確認しましたが、うまくいきませんでした。
スクリプト 1
SELECT is_computed
FROM sys.columns c, sys.views v
WHERE c.object_id = v.object_id
AND v.name = 'MyView'
前のスクリプトは、すべての結果に対して 0 を返します (これは正しくありません。列の 1 つが計算列です)。
スクリプト 2:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'MyView'`
また、返されたスクリプトから、「計算された列」または「ユニオンの結果」操作に関係するフィールドを見つけることができませんでした。