代码之家  ›  专栏  ›  技术社区  ›  JGFMK

排序规则冲突SQL Server varchar存储过程参数

  •  1
  • JGFMK  · 技术社区  · 7 年前

    REXTESTER

    它说正在使用的是SQL Server 2014速成版。。。

    下面是导致该消息的最小代码。

    CREATE PROCEDURE #CONVERT_TIME_TO_24_HR
    (
      @TIME_STRING varchar(4)
    )
    AS
    BEGIN
      DECLARE @AMPM as varchar(2);
      SET @AMPM = RIGHT(@TIME_STRING,2);
      IF @AMPM = 'am'
        SELECT 2
    END
    GO
    

    Error(s), warning(s):
    Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
    

    如果@TIME\u字符串只是声明的,而不是存储过程的参数,那么我没有问题。既然我无法控制SQL Server实例,我该如何解决这个问题?

    这是一个 forked version 当它不是参数时-没有问题

    DECLARE @TIME_STRING varchar(4);
    DECLARE @AMPM as varchar(2);
    SET @AMPM = RIGHT(@TIME_STRING,2);
      IF @AMPM = 'am'
        SELECT 2
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Linoff    7 年前

    CREATE PROCEDURE #CONVERT_TIME_TO_24_HR (
      @TIME_STRING varchar(4)
    ) AS
    BEGIN
      DECLARE @AMPM as varchar(2);
      SET @AMPM = RIGHT(@TIME_STRING,2);
      IF @AMPM = 'am' COLLATE SQL_Latin1_General_CP1_CI_AS ;
      SELECT 2;
    END;
    

    我承认这不是一个常见的专栏。在您自己的系统上,默认排序规则可能都匹配。我不知道为什么Rextester的设计者会有不同的默认排序规则。