【问题标题】:INSERT error - Implicit conversion of varchar value (collation)INSERT 错误 - varchar 值的隐式转换(排序规则)
【发布时间】:2011-11-17 20:18:46
【问题描述】:

当我尝试更改我的存储过程(如下)并收到此错误消息时:

“无法执行 varchar 值到 varchar 的隐式转换,因为由于排序规则冲突导致值的排序规则未解决”

错误出现在这一行:

INSERT INTO @TempList (OrderID) VALUES (@EmpID)

我不明白排序规则存在什么问题。

请,关于这个的想法..

谢谢

USE [database]
GO

SET ANSI_NULLS ON

GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[database_0301_PRJ_dir_ger]

@EmpList varchar(100)

AS

  DECLARE @TempList table (OrderID varchar(10))
  DECLARE @EmpID varchar(10) 
  DECLARE @Pos int

  IF @EmpList <> ''
  BEGIN
    SET NOCOUNT ON

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

    IF REPLACE(@EmpList, ',', '') <> ''
    BEGIN
      WHILE @Pos > 0
      BEGIN
        SET @EmpID = LTRIM(RTRIM(LEFT(@EmpList, @Pos - 1)))
        IF @EmpID <> ''
        BEGIN
          INSERT INTO @TempList (OrderID) VALUES (@EmpID)
        END
        SET @EmpList = RIGHT(@EmpList, LEN(@EmpList) - @Pos)
        SET @Pos = CHARINDEX(',', @EmpList, 1)
      END
  END

  SELECT dir.sigla + '-' + ger.nome AS dirger, 
    ger.codigo as gercodigo, 
    ger.nome as gernome, 
    dir.nome AS dirnome, 
    ger.diretoria as gerdiretoria 
  FROM d
    bo.database_091500_GERENCIAS AS ger 
  INNER JOIN 
    dbo.database_090200_DIRETORIAS AS dir 
  ON 
    ger.diretoria = dir.codigo 
  WHERE 
    ger.diretoria IN (select * FROM @TempList)
END

【问题讨论】:

    标签: sql collation


    【解决方案1】:

    这听起来像是语言/国际化的配置问题。

    也许您的客户端可能针对一种语言环境进行配置,而您的数据库/数据库服务器可能针对不同的语言环境进行配置?

    一种解决方法可能是显式转换,例如:

    http://www.sqlservercentral.com/Forums/Topic225939-8-1.aspx#bm225952

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2010-10-24
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多