2009-03-24 1 views
1

유형 (예 : nvarchar 또는 int)이 고정 길이인지 또는 일부 시스템 테이블을 쿼리하여 t-sql을 사용하여 런타임을 찾을 수 있습니까?t-sql의 유형이 고정 길이인지 여부 (런타임)를 찾는 방법은 무엇입니까?

이 작업을 수행하는 이유는 sql-code runtime을 생성해야하고 일부 열 (유형은 디자인 타임에 알 수 없음)에 따라 일부 선언 (DECLARE @foo SOMETYPE(LENGTH) 또는 DECLARE @foo SOMETYPE)을 생성해야하기 때문입니다.

내 현재 내기는 sys.all_columns.max_length = sys.types.max_length인지 확인하고 길이가 고정 길이라고 가정하면 (max_length은 적어도 nvarchar의 경우 특수 코드 (-1)로 표시됨).

+0

어떤 SQL Server 버전과 호환해야합니까? 일부 솔루션 (예 : information_schema.columns)은 SQL 2005 이상 버전에서만 작동합니다. –

+0

SQL 2005 이상 나는 character-types, decimal-types, ints 등을 모두 이해할 수있는 선언을 생성하는 훌륭한 알고리즘을 찾을 수없는 것 같습니다. 단지 information_schema.columns.numeric_precision/numeric_scale/character_maximum_length를 확인하는 것 같지 않습니다. 충분 해. – finnsson

답변

1

information_schema.columns에서 확인할 수 있습니다. 문자 유형 컬럼의 최대 길이가 character_maximum_length에 지정되면 숫자 필드의 정밀도는 numeric_precision에 정의됩니다. 몇 가지 메모, 내 지식을 int 유형은 항상 4 바이트, 또한 var 유형의 정의에 의해 고정 길이가 아닌 경우에만 그들의 최대 길이까지 저장, nvarchar (10) 2 보유하고있다 문자열은 2 문자 만 저장합니다. 고정 길이 문자열을 감지하려면 char 또는 nchar 유형을 찾고 있어야합니다.

+0

@cmsjr : int의 저장 크기는 4 바이트입니다 (bigint는 8 바이트 임). –

0

예, 가능합니다. 내장 proc sp_columns에 대한 코드를 살펴보고이를 수행하는 방법을 살펴보십시오.

관련 문제