IsNumeric не работает на сервере SQL - PullRequest
3 голосов
/ 24 марта 2011

Меня очень раздражает этот простой запрос ...
Мне нужно добавить смещение к varchar, если это число и ничего не делать, если это не так.
По этой причине я создал следующеефункция в SQL-сервере.Затем я извлекаю ответ: select dbo.OffsetKPL("100",200)

Однако это не работает, я получаю сообщение об ошибке

Сообщение 207, Уровень 16, Состояние 1, Строка 1
Недопустимоимя столбца '100'.

Код функции следующий:

ALTER FUNCTION [dbo].[OffsetKPL](
  @kpl varchar(20)
  ,@offset int = 0
)
RETURNS varchar(20)
AS
BEGIN   
  DECLARE @uitkomst varchar(20);

  set @uitkomst = @kpl;
  if not(@offset = 0) begin
    if (IsNumeric(@uitkomst) = 1) begin
      set @uitkomst = cast((cast(@kpl as int) + @offset) as varchar);
    end;
end;

RETURN @uitkomst;

END

Что не так?нигде не говорится, что IsNumeric не принимает переменную.

1 Ответ

7 голосов
/ 24 марта 2011

Используйте одинарные кавычки для строк!

select dbo.OffsetKPL('100',200)

Если у вас установлено значение QUOTED_IDENTIFIER (по умолчанию), то в двойных кавычках должны быть имена объектов.

isnumeric может оказаться не тем, что вам нужно, поскольку все виды неожиданностей возвращают 1 для этого.

SELECT ISNUMERIC('$'), ISNUMERIC('.'), 
       ISNUMERIC('12d5'), ISNUMERIC(','), ISNUMERIC('1e1')

См. IsNumeric () сломан? Только до момента для некоторого обсуждения по этому вопросу.

...