2012-09-28 146 views
4

我收到以下錯誤消息。無法解決排序規則衝突

在等於操作中無法解決「Latin1_General_CI_AI」和「SQL_Latin1_General_CP1_CI_AS」之間的歸類衝突。

我只在下面的代碼放在我的WHERE子句中才能得到它。

WHERE Region IN (SELECT Token FROM dbo.getParmsFromString(@Region)) 

現在,@Region包含來自SSRS多選字段的所有值。

下面是使用的函數的代碼。

CREATE FUNCTION [dbo].[getParmsFromString] 
    (@String VARCHAR(MAX)) 
RETURNS @Parms TABLE 
(
    Token VARCHAR(MAX) 
) 
AS 
BEGIN 
    IF CHARINDEX(',', @String) != 0 
    BEGIN 
     ;WITH cte0(Token, List) AS 
       (
       SELECT SUBSTRING(@String, 1, CHARINDEX(',',@String,1) - 1) 
         ,SUBSTRING(@String,CHARINDEX(',',@String,1) + 1, LEN(@String)) + ',' 

       UNION ALL 

       SELECT  SUBSTRING(List,1,ISNULL(CHARINDEX(',',List,1) - 1,1)) 
         ,SUBSTRING(List,CHARINDEX(',',List,1) + 1, LEN(List)) 
       FROM cte0 
       WHERE LEN(cte0.List) > 0 
      ) 

      INSERT INTO @Parms (Token) 
      SELECT Token 
      FROM cte0 
      OPTION (MAXRECURSION 0) 
     RETURN; 
    END 

    ELSE 
     INSERT INTO @Parms 
      SELECT @String 
     RETURN; 
END 

回答

2

嘗試改變

RETURNS @Parms TABLE 
( 
    Token VARCHAR(MAX) 
) 

try changing RETURNS @Parms TABLE 
( 
    Token VARCHAR(MAX) COLLATE DATABASE_DEFAULT 
) 

WHERE Region IN (SELECT Token FROM dbo.getParmsFromString(@Region)) 

WHERE Region COLLATE DATABASE_DEFAULT IN (SELECT Token FROM dbo.getParmsFromString(@Region)) 
0

通常,當您嘗試比較不同區域的數據或將使用特定加密的數據與使用不同加密的其他數據進行比較時,會發生此類錯誤。 最有可能的原因是他們的tempdb正在使用排序規則「SQL_Latin1_General_CP1_CI_AS」而數據庫使用的是「Latin1_General_CI_AS」。因此,在排序規則「SQL_Latin1_General_CP1_CI_AS」下創建臨時對象,然後無法與使用排序規則「Latin1_General_CI_AS」的數據庫的數據庫對象進行比較。

最簡單的修復方法,也是建議的方法,是在使用排序規則「Latin1_General_CI_AS」安裝的服務器上運行數據庫。

僅供參考。 SQL排序規則(「SQL_Latin1_General_CP1_CI_AS」)出現在sql server中以實現向後兼容。當使用unicode和非unicode數據處理國際數據或數據庫時,建議使用windows排序規則(「Latin1_General_CI_AS」)。

您可以通過更改數據庫排序規則:

use master 
ALTER DATABASE "Your database" 
COLLATE Latin1_General_CI_AS; 

SELECT name, collation_name 
FROM sys.databases; 

,如果需要,還可以改變「主」,即數據庫的整理重建數據庫,對於這個經過這些鏈接:

http://msdn.microsoft.com/en-us/library/dd207003(v=sql.100).aspx

http://sqlbuzz.wordpress.com/2011/08/20/how-to-rebuild-master-database-aka-rebuilding-sql-server-2008r2/

,但在此之前請確保您備份您的所有數據庫。

相關問題