在SPROC中添加COLLATION的位置

时间:2010-06-08 19:17:34

标签: sql-server tsql collation

我在SQL Server的存储过程中发生了排序规则错误。

无法在等于操作的情况下解决“Latin1_General_CS_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

数据库的排序规则是Latin1_General_CS_AS

错误发生在INSERT INTO行上。我应该在哪里添加COLLATE语句?

CREATE TABLE #TempList
(
    TNR varchar(10)
)

DECLARE @TNR varchar(10), @Pos int

SET @subjectList = LTRIM(RTRIM(@subjectList))+ ','
SET @Pos = CHARINDEX(',', @subjectList, 1)

IF REPLACE(@subjectList, ',', '') <> ''
BEGIN
    WHILE @Pos > 0
    BEGIN
        SET @TNR = LTRIM(RTRIM(LEFT(@subjectList, @Pos - 1)))
        IF @TNR <> ''
        BEGIN
            INSERT INTO #TempList (TNR) VALUES (CAST(@TNR AS varchar(10))) --this is where it errors
        END
        SET @subjectList = RIGHT(@subjectList, LEN(@subjectList) - @Pos)
        SET @Pos = CHARINDEX(',', @subjectList, 1)

    END
END 

1 个答案:

答案 0 :(得分:1)

临时表使用tempdb服务器排序规则,即服务器排序规则。

使用COLLATE Database_Default更改它以使用“主机”数据库归类使归类强制独立于实际的DB归类

CREATE TABLE #TempList
(
    TNR varchar(10) COLLATE Database_Default
)
...

不适用于@TNR(即使是字符串数据类型),因为这显然与DB(而不是服务器)具有相同的排序规则,因此错误...