分配变量时存储过程中的归类冲突

时间:2009-09-22 14:11:49

标签: sql sql-server sql-server-2005 tsql collation

我们正在尝试创建存储过程,但是我们遇到以下错误消息:

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

此错误发生在第33行,其内容如下:

SET @MINTIME = (SELECT CONVERT(varchar,DATEADD(MONTH,-1,GETDATE()),112));

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

通常情况下,这是有效的

SET @MINTIME =
(SELECT CONVERT(varchar,DATEADD(MONTH,-1,GETDATE()),112)) COLLATE DATABASE_DEFAULT;

或者

仅适用于列defs,例如表变量: DECLARE @MINTIME varchar(??)COLLATE DATABASE_DEFAULT

之所以发生这种情况,是因为您在某处出现了不匹配,例如@mintime排序规则(因为DECLARE时间)与数据库排序规则不匹配(转换为varchar使用)

编辑:你确定这是这条线吗? 错误通常发生在字符串比较中。在一个简单的赋值中,右手表达式的整理将被强制转换为左手整理。

随机思考:第33行,这是第1行通常是“CREATE PROC”的地方,当你右键单击,在SSMS中编辑时,不包括添加的SET ANSI东西等