복붙노트

[SQL] NVARCHAR 선언에서 생략 크기의 효과는 무엇인가

SQL

NVARCHAR 선언에서 생략 크기의 효과는 무엇인가

처럼, 내 SP에서 매개 변수를 선언 할 때 나는 보통 크기를 정의 :

@myParam nvarchar(size)

아니면 캐스팅 또는 변환 할 때 :

CAST(@myParam AS nvarchar(size))

최근에 나는 내 CAST 기능 등으로 크기를 제거했습니다 :

CAST(@myParam AS nvarchar)

그 와서 적어도 :-( 예상 할 때 나에게 물린 것 경우 재귀 CTE를 사용하여 크기를 지정하지 않고 NVARCHAR를 캐스팅 할 때 내가 NVARCHAR 변수에 절단을 발견 이후 나는 조금 걱정하고있다.

다른하실 말씀 있나요?

해결법

  1. ==============================

    1.당신이 크기를 생략 할 경우, 30 페이지에 기본값이 :

    당신이 크기를 생략 할 경우, 30 페이지에 기본값이 :

    http://msdn.microsoft.com/en-us/library/ms186939.aspx

    행동이를 보려면 다음 문을 실행하십시오 :

    --outputs: 12345678901234567890.098765432 
    select cast (12345678901234567890.098765432 as nvarchar)
    
    --throws "Arithmetic overflow error converting expression to data type nvarchar."
    select cast (12345678901234567890.0987654321 as nvarchar) 
    
    --outputs: 12345678901234567890.0987654321 
    select cast (12345678901234567890.0987654321 as nvarchar(31))
    

    @ krul의 코멘트 당; 30 CAST의 기본 길이; 그러나 데이터 정의 또는 변수 선언의 기본 길이는 1입니다.

    NB : 기본 길이가 10 인에 대한 문자열에 숫자 필드를 변환하는 STR 기능도 있습니다.

    --outputs: 1234567890
    select str(1234567890)
    
    --outputs: **********
    select str(12345678901)
    
    --outputs: 12345678901
    select str(12345678901,11)
    
  2. ==============================

    2.그것은 기본 크기로 크기를 설정하고 나머지를 자릅니다. 이것은 참으로 가능성이 기본 크기가 적합하지 않는 한, 당신을 물어 올 것이다.

    그것은 기본 크기로 크기를 설정하고 나머지를 자릅니다. 이것은 참으로 가능성이 기본 크기가 적합하지 않는 한, 당신을 물어 올 것이다.

    이벤트는, 당신은 항상 당신이 크기가 대신 NVARCHAR의 기본 크기가 무엇인지 물어 SO에 와서이 코드에 읽는 다음 사람을 필요없이 될 것입니다 무슨 생각을 명확하게하기 위해 크기를 지정 제안) .

  3. from https://stackoverflow.com/questions/1131499/what-is-the-effect-of-omitting-size-in-nvarchar-declaration by cc-by-sa and MIT license