"Remarks"라는 varchar [1000] 필드가있는 SQL 테이블이 있다고 가정합니다.
실행될 때 1000을 반환하거나 앞으로 varchar 필드의 크기가 변경 될 수있는 단일 SQL 문을 만들고 싶습니다.
같은 것 SELECT size(Remarks) FROM mytable
.
어떻게해야합니까?
답변:
select column_name, data_type, character_maximum_length
from information_schema.columns
where table_name = 'myTable'
AND column_name = 'Remarks'
하나의 열만 필터링하려는 경우 추가 절을 지정할 수 있습니다.
INFORMATION_SCHEMA
ANSI 표준입니다. MySQL이나 SQL Server에만 국한된 것이 아닙니다!
AND table_schema = 'mydatabase'
{ }
친절에 편집기 도구 모음) 형식 및 구문을 강조!
SQL Server (2008 이상) :
SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION');
COLUMNPROPERTY는 열 또는 매개 변수 (id, 열 / 매개 변수, 속성)에 대한 정보를 반환합니다. PRECISION 속성은 열 또는 매개 변수의 데이터 유형 길이를 반환합니다.
이것은 SQL SERVER에서 작동합니다 ...
SELECT COL_LENGTH('Table', 'Column')
NVARCHAR
나 NCHAR
예를 들어. 참조 docs.microsoft.com/en-us/sql/t-sql/functions/...
t-SQL의 경우 varchar 열에 대해 다음 쿼리를 사용합니다 (데이터 정렬 및 is_null 속성 표시).
SELECT
s.name
, o.name as table_name
, c.name as column_name
, t.name as type
, c.max_length
, c.collation_name
, c.is_nullable
FROM
sys.columns c
INNER JOIN sys.objects o ON (o.object_id = c.object_id)
INNER JOIN sys.schemas s ON (s.schema_id = o.schema_id)
INNER JOIN sys.types t ON (t.user_type_id = c.user_type_id)
WHERE
s.name = 'dbo'
AND t.name IN ('varchar') -- , 'char', 'nvarchar', 'nchar')
ORDER BY
o.name, c.name
이것은 varchar (Nn)의 최대 유효 길이를 계산하는 함수입니다.
CREATE FUNCTION [dbo].[GetMaxVarcharColumnLength] (@TableSchema NVARCHAR(MAX), @TableName NVARCHAR(MAX), @ColumnName VARCHAR(MAX))
RETURNS INT
AS
BEGIN
RETURN (SELECT character_maximum_length FROM information_schema.columns
WHERE table_schema = @TableSchema AND table_name = @TableName AND column_name = @ColumnName);
END
용법:
IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name')
RETURN [dbo].[err_Internal_StringForVarcharTooLong]();