2011-03-24 6 views
3

이 간단한 쿼리로 매우 짜증이났습니다 ...
숫자 일 경우 varchar에 오프셋을 추가하고 그렇지 않으면 아무것도하지 않아야합니다.
SQL 서버에 다음과 같은 기능을 생성했습니다. 나는 다음과 답 추출 : select dbo.OffsetKPL("100",200)IsNumeric이 SQL 서버에서 작동하지 않습니다

그러나이 작동하지 않습니다, 나는 오류

메시지 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

'100'대신 '100'을 사용 하시겠습니까? – cairnz

답변

7

문자열에 작은 따옴표를 사용하십시오!

select dbo.OffsetKPL('100',200) 

당신이 QUOTED_IDENTIFIER이있는 경우

은 (기본값)은 큰 따옴표 것들은 개체 이름이 될 것으로 예상된다.

isnumeric은 예상치 못한 모든 것들이이 경우 1을 반환하기 때문에 필요한 것은 아닙니다.

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

이 부분에 대한 설명은 IsNumeric() Broken? Only up to a point을 참조하십시오.

+0

그래, 그게 작동, 난 정말 거기에 stuckenstein했다, 어쨌든 그건 내가 tinfoil 모자를 벗고 얻을거야. – Johan

+1

나는 IsNumeric의 borken 상태에 대해 알고있다. 그러나 목적을 위해 나는 "문제"에 대해 생각해 본적이 없다. 대개 MySQL에서 작동한다. – Johan

관련 문제