3

对这个简单的查询感到非常恼火......
我需要向 varchar 添加一个偏移量,如果它是一个数字并且什么都不做,它不是。
出于这个原因,我在 SQL-server 中创建了以下函数。然后我提取答案: 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 不接受变量。

4

1 回答 1

7

对字符串使用单引号!

select dbo.OffsetKPL('100',200)

如果你有QUOTED_IDENTIFIER(默认)双引号中的东西应该是对象名称。

isnumeric可能不是你所需要的,因为各种意想不到的事情都会1为此而发生。

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

请参阅IsNumeric() 损坏?就这一点进行一些讨论。

于 2011-03-24T12:54:26.290 回答