无法解析排序规则冲突(Cannot resolve the collation conflict)

2019-09-23 04:23发布

我收到以下错误消息。

无法解析“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

Answer 1:

试着改变

 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))  


Answer 2:

您definitly应该看看这个链接:

http://msdn.microsoft.com/de-de/library/ms179886.aspx

还有一个例子,如何改变排序的查询。



Answer 3:

一般来说,当你尝试比较不同地区的数据,或者这种类型的错误发生时,您使用比较用不同的加密其他数据的特定的加密数据。 最可能的原因是,他们的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/

但在此之前请确保您备份您的所有数据库。



文章来源: Cannot resolve the collation conflict