我在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
答案 0 :(得分:1)
临时表使用tempdb服务器排序规则,即服务器排序规则。
使用COLLATE Database_Default
更改它以使用“主机”数据库归类和使归类强制独立于实际的DB归类
CREATE TABLE #TempList
(
TNR varchar(10) COLLATE Database_Default
)
...
不适用于@TNR(即使是字符串数据类型),因为这显然与DB(而不是服务器)具有相同的排序规则,因此错误...