열 유형을 가져올 SQL 문
테이블의 컬럼 유형을 반환할 수 있는 SQL 문이 있습니까?
SQL Server 사용:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = 'yourSchemaName' AND
TABLE_NAME = 'yourTableName' AND
COLUMN_NAME = 'yourColumnName'
TSQL에서 가장 쉬운 방법은 다음과 같습니다.
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'yourTableName'
SQL Server의 경우 이 시스템 저장 프로시저는 다음과 같은 열 데이터 유형을 포함한 모든 테이블 정보를 반환합니다.
exec sp_help YOURTABLENAME
MySQL을 사용하는 경우
SHOW COLUMNS FROM `tbl_name`;
그렇지 않으면 할 수 있을 것이다.
DESCRIBE `tbl_name`;
TSQL/MSSQL에서는 다음과 같습니다.
SELECT t.name, c.name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types y ON y.user_type_id = c.user_type_id
WHERE t.name = ''
위의 답변을 기반으로 하려면 열을 선언할 때와 동일한 형식으로 열 데이터 유형을 가져오는 것이 유용합니다.
예를들면,varchar(50),varchar(max),decimal(p, s).
이를 통해 다음과 같은 작업을 수행할 수 있습니다.
SELECT
[Name] = c.[name]
, [Type] =
CASE
WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length AS VARCHAR(25))) + ')'
WHEN tp.[name] IN ('nvarchar','nchar') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length / 2 AS VARCHAR(25)))+ ')'
WHEN tp.[name] IN ('decimal', 'numeric') THEN tp.[name] + '(' + CAST(c.[precision] AS VARCHAR(25)) + ', ' + CAST(c.[scale] AS VARCHAR(25)) + ')'
WHEN tp.[name] IN ('datetime2') THEN tp.[name] + '(' + CAST(c.[scale] AS VARCHAR(25)) + ')'
ELSE tp.[name]
END
, [RawType] = tp.[name]
, [MaxLength] = c.max_length
, [Precision] = c.[precision]
, [Scale] = c.scale
, [IsNullable] = c.is_nullable
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name] = 'dbo' AND t.[name] = 'MyTable'
Oracle SQL에서는 다음을 수행합니다.
SELECT
DATA_TYPE
FROM
all_tab_columns
WHERE
table_name = 'TABLE NAME' -- in uppercase
AND column_name = 'COLUMN NAME' -- in uppercase
MS SQL을 사용한 또 다른 변형:
SELECT TYPE_NAME(system_type_id)
FROM sys.columns
WHERE name = 'column_name'
AND [object_id] = OBJECT_ID('[dbo].[table_name]');
TSQL/MSSQL 사용
이 쿼리는 테이블 이름, 열 이름, 데이터 유형, 데이터 유형 길이 및 허용되는 null을 가져옵니다.
SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
변경할 필요가 있는 것은 your_table_name 뿐입니다.
또한 열 이름과 해당 문자 유형만 선택할 수 있습니다.
SELECT COLUMN_NAME ,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Items';
예를 들어 동적 SQL에서 ALTER COLUMN에 사용할 때 실제로 선언된 데이터 유형을 검색하려면 다음과 같은 방법을 사용할 수 있습니다.
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE
+ CASE WHEN DATA_TYPE IN ('char','nchar','varchar','nvarchar','binary','varbinary')
AND CHARACTER_MAXIMUM_LENGTH > 0 THEN
COALESCE('('+CONVERT(varchar,CHARACTER_MAXIMUM_LENGTH)+')','')
ELSE '' END
+ CASE WHEN DATA_TYPE IN ('decimal','numeric') THEN
COALESCE('('+CONVERT(varchar,NUMERIC_PRECISION)+','+CONVERT(varchar,NUMERIC_SCALE)+')','')
ELSE '' END
AS Declaration_Type,
CASE WHEN IS_NULLABLE='NO' THEN 'NOT ' ELSE '' END + 'NULL' AS Nullable
FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY 1,2
SQL Server 2012부터:
SELECT * FROM sys.dm_exec_describe_first_result_set( N'SELECT * FROM [my].[Table]', NULL, 0 );
USE [YourDatabaseName]
GO
SELECT column_name 'Column Name',
data_type 'Data Type'
FROM information_schema.columns
WHERE table_name = 'YourTableName'
GO
그러면 열 이름과 해당 열의 데이터 유형(ints, varchar 등)이 표시된 값이 반환됩니다.
IBM DB2의 경우:
SELECT TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA='your_schema_name' AND TABNAME='your_table_name' AND COLNAME='your_column_name'
TSQL/MSSQL 사용
사용할 수 있습니다.INTO키워드를 지정합니다.
의 결과SELECT진짜 탭으로LE
예:select .... INTO real_table_name
끝나고
sp_help real_table_name
데이터 타입에 대해서도 정밀도를 요구하는 사람이 있었기 때문에, 그러한 목적으로 작성한 스크립트를 공유하고 싶습니다.
SELECT TABLE_NAME As 'TableName'
COLUMN_NAME As 'ColumnName'
CONCAT(DATA_TYPE, '(', COALESCE(CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, DATETIME_PRECISION, ''), IIF(NUMERIC_SCALE <> 0, CONCAT(', ', NUMERIC_SCALE), ''), ')', IIF(IS_NULLABLE = 'YES', ', null', ', not null')) As 'ColumnType'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE -- ...
ORDER BY 'TableName', 'ColumnName'
완벽하지는 않지만 대부분의 경우 효과가 있습니다.
사용.Sql-Server
MS SQL의 또 다른 옵션은,select다음 유형의 쿼리를 사용하여 여기서 쿼리합니다.
declare @sql varchar(4000);
set @sql = 'select ''hi'' as greeting';
select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);
이 쿼리를 사용합니다.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TABLE_NAME'
ORDER BY ORDINAL_POSITION
아래 SQL 스크립트에서는 완벽하게 동작합니다.
SELECT column_name AS 'Column Name',data_type AS 'Data Type'
FROM information_schema.columns
WHERE table_name = '[Table Name]'
제 경우 Dynamic SQL(Shudder!)의 데이터 유형을 가져와야 했습니다.여기에 완전한 데이터 유형을 반환하는 함수가 있습니다.예를 들어 '10진수'를 반환하는 대신 DIMAL(18,4): dbo를 반환합니다.GetLiteral Data Type(GetLiteral 데이터 타입)
이 쿼리를 사용하여 스키마, 테이블, 열, 유형, max_length, is_nullable을 가져옵니다.
SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id])) AS 'Schema'
,QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID])) AS 'Table'
,C.NAME as 'Column'
,T.name AS 'Type'
,C.max_length
,C.is_nullable
FROM SYS.COLUMNS C INNER JOIN SYS.TABLES tb ON tb.[object_id] = C.[object_id]
INNER JOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped] = 0
ORDER BY tb.[Name]
SHOW COLUMNS FROM //table_name// ;
표의 모든 열에 대한 정보를 제공합니다.
쿼리에서 특히 애그리게이트 또는 여러 테이블(SQL Server)을 사용하는 경우 유용합니다.
DECLARE @query nvarchar(max) = 'select * from yourtable';
EXEC sp_describe_first_result_set @query, null, 0;
누군가 이걸 유용하게 여긴다면요SQL Server:
sp_columns 'yourtablename'
그러면 모든 열에 대한 세부 정보가 표시됩니다.column_name, data_type, type_name, 정밀도, 길이, iss_successable 등을 제공합니다.
DESCRIBE [db_name.]table_name column_name
다음 답변에 나와 있는 Apache Derby의 경우:
select columndatatype from sys.syscolumns
where referenceid = (
select tableid from sys.systables
where tablename = 'YOUR_TABEL_NAME'
and columnname= 'YOUR_COLUMN_NAME')
vb60에서는 다음을 수행할 수 있습니다.
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
sample (valRs는 rs.fields("CARCHER_MAXIMALGE_LENGH")의 함수입니다.값:
RT_Charactar_Maximum_Length = (ValRS(Rs, "CHARACTER_MAXIMUM_LENGTH"))
rt_Tipo = (ValRS(Rs, "DATA_TYPE"))
Microsoft SQL Server Management Studio에서 가장 간단하고 유용한 방법이라고 생각합니다.
EXEC [ServerName].[DatabaseName].dbo.sp_help 'TableName'
간단히 이것을 해라
describe table test.oim_test_2
데이터 유형과 함께 모든 열에 대한 세부 정보를 얻을 수 있습니다.
다음 스크립트를 사용하여 동일한 스크립트를 얻을 수 있습니다.
SELECT column_name 'Column_Name', data_type 'Data_Type'
FROM information_schema.columns
WHERE table_name = 'Name of your desired table'
주의: varchar/nvarchar 유형 열에 대해 지정한 크기를 반환하지 않습니다.
테이블에 대한 자세한 내용을 보려면 다음 스크립트를 사용합니다.
EXEC [Your Database Name].dbo.sp_help 'Your Table Name'
언급URL : https://stackoverflow.com/questions/13405572/sql-statement-to-get-column-type
'source' 카테고리의 다른 글
| .NET 4.5의 기본 보안 프로토콜 (0) | 2023.05.28 |
|---|---|
| "관리"와 "관리되지 않음"의 차이 (0) | 2023.04.19 |
| LPCTR, LPCTTR 및 LPTSTR (0) | 2023.04.19 |
| Excel의 행 수를 데이터로 계산하는 방법은 무엇입니까? (0) | 2023.04.19 |
| 다른 프로세스에서 사용 중인 파일 삭제 (0) | 2023.04.19 |