3

この単純なクエリに非常に悩まされています...
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が変数を受け入れないとはどこにも述べられていません。

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 に答える