Ошибка INSERT - неявное преобразование значения varchar (сопоставление) - PullRequest
1 голос
/ 18 ноября 2011

Когда я пытаюсь изменить свою хранимую процедуру (ниже), и я получаю это сообщение об ошибке:

"Неявное преобразование значения 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

1 Ответ

0 голосов
/ 18 ноября 2011

Звучит как проблема с настройкой языка / интернационализации.

Возможно, ваш клиент настроен для одной локали, а база данных / сервер базы данных - для другой локали?

Одним из обходных путей может быть явное приведение, например:

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

...