我使用SQL Server 2005/2008 R2捕捉更新/插入計算列
我的SQL腳本是:
UPDATE MyView
SET MyColumn = 'My new value'
WHERE ID = 7
錯誤消息:
消息271,Level 16,State 1,Line 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(這是不正確的,其中一列是一個計算列)
腳本2:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'MyView'`
此外,我無法從返回的腳本中找到與「計算列」或「聯合結果」操作有關的任何字段。
http://www.sommarskog.se/error-handling-I.html – Hackerman 2013-03-22 20:38:37
有'sys.computed_columns' **正好**告訴你哪些列被計算 - 只是做一個'SELECT Name FROM sys。 computed_columns'來獲得計算列的名稱 – 2013-03-22 23:06:13