2009-09-01

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AI" in the equal to operation.

公司有一台DB是從SQL 2000昇級到SQL 2005
昇級過程一切順利,但是在執行一個Query時發生了以下的錯誤:
System.Data.OleDb.OleDbException: Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AI" in the equal to operation.

查明原因為Stored Procedure裡面使用了

Create table [#tmp_Search_Products]
(
[i_ID] [varchar] (20),
[Version] [varchar] (10),
[skeyword] [varchar] (100)
)

之前遇到一次是使用ASP.NET 內建的Membership資料庫,在本機測試都沒問題
可是上傳到國外的web hosting server之後也是一樣的錯誤,上次找了整整二天才解決

這一次又遇到,一開始也是往錯誤的方向找,後來突然想到有可能是一樣的問題
靈機一動,噹噹噹,加上COLLATE SQL_Latin1_General_CP1_CI_AS就好囉

以下為完整範例

Create table [#tmp_Search_Products]
(
[i_ID] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Version] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[skeyword] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
)

0 comments: