[SQL]使用Filtered Index要注意的地方
最近建立一個Filtered Index後,程式呼叫SP時,居然出現以下的錯誤,
<System.Data.SqlClient.SqlException> UPDATE 失敗,因為下列 SET 選項的設定錯誤: 'QUOTED_IDENTIFIER'。
請確認與 索引檢視表及/或計算資料行上的索引及/或篩選的索引及/或查詢通知及/或 XML 資料類型方法及/或空間索引作業 一起使用的 SET 選項是否正確。
[ SqlException.Number : 1934, SqlException.LineNumber : 101, SqlException.State : 1 ]
看起來是因為建立 Filtered Index 使用的 QUOTED_IDENTIFIER 是 ON,而SP使用的是 OFF。
解法有2個,
1.不要使用Filtered Index(因為使用Filtered Index QUOTED_IDENTIFIER 一定要為ON,但index的size會變大),一般的Index則不需要一定要設成ON。
2.重新建立該SP,以SET QUOTED_IDENTIFIER ON來建立。
可以參考「Filtered Index and QUOTED_IDENTIFIER issue in SQL Server 2008」查看DB中的SP有那些設定「QUOTED_IDENTIFIER」為OFF。
SELECT o.name
FROM sys.sql_modules m
JOIN sys.objects o ON m.object_id = o.object_id
WHERE (m.uses_quoted_identifier = 0 or
m.uses_ansi_nulls = 0)
AND o.type NOT IN ('R', 'D')
我們的DB中有7百多支是設定成OFF~~ 奇怪,SET QUOTED_IDENTIFIER ON,不是預設值嗎?
參考資料
Filtered Index and QUOTED_IDENTIFIER issue in SQL Server 2008
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^