[SQL] SQL 서버 쿼리는 데이터 유형, NOT NULL 및 PRIMARY KEY 제약 조건과 함께 테이블에 열 목록을 얻을 수 있습니다
SQLSQL 서버 쿼리는 데이터 유형, NOT NULL 및 PRIMARY KEY 제약 조건과 함께 테이블에 열 목록을 얻을 수 있습니다
나는 특정 테이블에 열 목록을 얻기 위해 SQL 서버에 대한 쿼리를 작성해야, 관련 데이터 타입 (길이) 및 한 경우에는 null이되지 않습니다. 그리고 나는이 많은 일을 관리했다.
하지만 지금은 또한 열에 대해, 같은 테이블에, 얻을 필요 - TRUE 그 열이 기본 키의 경우.
이걸 어떻게해야합니까?
내 예상 출력은 다음과 같습니다
Column name | Data type | Length | isnull | Pk
해결법
-
==============================
1.일부 열에 대한 중복 행을 방지하기 위해 사용하는 대신 system_type_id의 user_type_id.
일부 열에 대한 중복 행을 방지하기 위해 사용하는 대신 system_type_id의 user_type_id.
SELECT c.name 'Column Name', t.Name 'Data type', c.max_length 'Max Length', c.precision , c.scale , c.is_nullable, ISNULL(i.is_primary_key, 0) 'Primary Key' FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE c.object_id = OBJECT_ID('YourTableName')
그냥 실제 테이블 이름으로 YourTableName 교체 - 작품을 SQL Server 2005 및 최대를 위해.
YourSchemaName 실제 스키마 이름이고 YourTableName 실제 테이블의 이름입니다 당신이 스키마를 사용하는 경우, YourSchemaName.YourTableName에 의해 YourTableName를 교체합니다.
-
==============================
2.저장 프로 시저 sp_columns 반환 테이블 정보를 자세히.
저장 프로 시저 sp_columns 반환 테이블 정보를 자세히.
exec sp_columns MyTable
-
==============================
3.당신은 쿼리를 사용할 수 있습니다 :
당신은 쿼리를 사용할 수 있습니다 :
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, DATETIME_PRECISION, IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='TableName'
당신이 Pk의 정보를 제외하고 필요한 모든 메타 데이터를 얻을 수 있습니다.
-
==============================
4.SQL 2012 년 당신은 사용할 수 있습니다 :
SQL 2012 년 당신은 사용할 수 있습니다 :
EXEC sp_describe_first_result_set N'SELECT * FROM [TableName]'
이것은 그들의 특성과 함께 당신에게 열 이름을 제공 할 것입니다.
-
==============================
5.이 시도:
이 시도:
select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS IC where TABLE_NAME = 'tablename' and COLUMN_NAME = 'columnname'
-
==============================
6.당신은 특별한 경우로 유니 코드 유형을 고려할 필요가 올바른 길이를 얻을 수 있도록합니다. 아래 코드를 참조하십시오.
당신은 특별한 경우로 유니 코드 유형을 고려할 필요가 올바른 길이를 얻을 수 있도록합니다. 아래 코드를 참조하십시오.
더 자세한 정보를 참조하십시오 : https://msdn.microsoft.com/en-us/library/ms176106.aspx
SELECT c.name 'Column Name', t.name, t.name + CASE WHEN t.name IN ('char', 'varchar','nchar','nvarchar') THEN '('+ CASE WHEN c.max_length=-1 THEN 'MAX' ELSE CONVERT(VARCHAR(4), CASE WHEN t.name IN ('nchar','nvarchar') THEN c.max_length/2 ELSE c.max_length END ) END +')' WHEN t.name IN ('decimal','numeric') THEN '('+ CONVERT(VARCHAR(4),c.precision)+',' + CONVERT(VARCHAR(4),c.Scale)+')' ELSE '' END as "DDL name", c.max_length 'Max Length in Bytes', c.precision , c.scale , c.is_nullable, ISNULL(i.is_primary_key, 0) 'Primary Key' FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE c.object_id = OBJECT_ID('YourTableName')
-
==============================
7.알렉스의 대답에 확장, 당신은 PK 제약 조건을 얻기 위해이 작업을 수행 할 수 있습니다
알렉스의 대답에 확장, 당신은 PK 제약 조건을 얻기 위해이 작업을 수행 할 수 있습니다
Select C.COLUMN_NAME, C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH, C.NUMERIC_PRECISION, C.IS_NULLABLE, TC.CONSTRAINT_NAME From INFORMATION_SCHEMA.COLUMNS As C Left Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As TC On TC.TABLE_SCHEMA = C.TABLE_SCHEMA And TC.TABLE_NAME = C.TABLE_NAME And TC.CONSTRAINT_TYPE = 'PRIMARY KEY' Where C.TABLE_NAME = 'Table'
나는 당신이 주어진 열 대신 PK 제약 조건의 이름의 PK의 일부 경우 플래그가 결정하도록 놓친해야합니다. 당신이 사용할 것이라고 경우 :
Select C.COLUMN_NAME, C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH , C.NUMERIC_PRECISION, C.NUMERIC_SCALE , C.IS_NULLABLE , Case When Z.CONSTRAINT_NAME Is Null Then 0 Else 1 End As IsPartOfPrimaryKey From INFORMATION_SCHEMA.COLUMNS As C Outer Apply ( Select CCU.CONSTRAINT_NAME From INFORMATION_SCHEMA.TABLE_CONSTRAINTS As TC Join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE As CCU On CCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME Where TC.TABLE_SCHEMA = C.TABLE_SCHEMA And TC.TABLE_NAME = C.TABLE_NAME And TC.CONSTRAINT_TYPE = 'PRIMARY KEY' And CCU.COLUMN_NAME = C.COLUMN_NAME ) As Z Where C.TABLE_NAME = 'Table'
-
==============================
8.쿼리 편집기에서 테이블 이름은 이름과하고 Alt + F1을 선택 작성하고 그 테이블의 모든 정보를 가져올 것이다.
쿼리 편집기에서 테이블 이름은 이름과하고 Alt + F1을 선택 작성하고 그 테이블의 모든 정보를 가져올 것이다.
-
==============================
9.
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'Table') BEGIN SELECT COLS.COLUMN_NAME, COLS.DATA_TYPE, COLS.CHARACTER_MAXIMUM_LENGTH, (SELECT 'Yes' FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU ON COLS.TABLE_NAME = TC.TABLE_NAME AND TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND KCU.TABLE_NAME = TC.TABLE_NAME AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME AND KCU.COLUMN_NAME = COLS.COLUMN_NAME) AS KeyX FROM INFORMATION_SCHEMA.COLUMNS COLS WHERE TABLE_NAME = 'Table' ORDER BY KeyX DESC, COLUMN_NAME END
-
==============================
10.반지로 다른 대답을 던지고, 이것은 당신에게 그 열 등을 제공합니다 :
반지로 다른 대답을 던지고, 이것은 당신에게 그 열 등을 제공합니다 :
SELECT col.TABLE_CATALOG AS [Database] , col.TABLE_SCHEMA AS Owner , col.TABLE_NAME AS TableName , col.COLUMN_NAME AS ColumnName , col.ORDINAL_POSITION AS OrdinalPosition , col.COLUMN_DEFAULT AS DefaultSetting , col.DATA_TYPE AS DataType , col.CHARACTER_MAXIMUM_LENGTH AS MaxLength , col.DATETIME_PRECISION AS DatePrecision , CAST(CASE col.IS_NULLABLE WHEN 'NO' THEN 0 ELSE 1 END AS bit)AS IsNullable , COLUMNPROPERTY(OBJECT_ID('[' + col.TABLE_SCHEMA + '].[' + col.TABLE_NAME + ']'), col.COLUMN_NAME, 'IsIdentity')AS IsIdentity , COLUMNPROPERTY(OBJECT_ID('[' + col.TABLE_SCHEMA + '].[' + col.TABLE_NAME + ']'), col.COLUMN_NAME, 'IsComputed')AS IsComputed , CAST(ISNULL(pk.is_primary_key, 0)AS bit)AS IsPrimaryKey FROM INFORMATION_SCHEMA.COLUMNS AS col LEFT JOIN(SELECT SCHEMA_NAME(o.schema_id)AS TABLE_SCHEMA , o.name AS TABLE_NAME , c.name AS COLUMN_NAME , i.is_primary_key FROM sys.indexes AS i JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id JOIN sys.objects AS o ON i.object_id = o.object_id LEFT JOIN sys.columns AS c ON ic.object_id = c.object_id AND c.column_id = ic.column_id WHERE i.is_primary_key = 1)AS pk ON col.TABLE_NAME = pk.TABLE_NAME AND col.TABLE_SCHEMA = pk.TABLE_SCHEMA AND col.COLUMN_NAME = pk.COLUMN_NAME WHERE col.TABLE_NAME = 'YourTableName' AND col.TABLE_SCHEMA = 'dbo' ORDER BY col.TABLE_NAME, col.ORDINAL_POSITION;
-
==============================
11.
SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM information_schema.columns WHERE table_name = '<name_of_table_or_view>'
위의 문에서 실행 SELECT * 반품 INFORMATION_SCHEMA.COLUMNS 것을 볼 수 있습니다.
이 질문은 이전에 대답하고있다 - https://stackoverflow.com/a/11268456/6169225
-
==============================
12.나는 약간은 아무도 언급하지 놀랜다
나는 약간은 아무도 언급하지 놀랜다
sp_help 'mytable'
-
==============================
13.
select c.name as [column name], t.name as [type name], tbl.name as [table name] from sys.columns c inner join sys.types t on c.system_type_id = t.system_type_id inner join sys.tables tbl on c.object_id = tbl.object_id where c.object_id = OBJECT_ID('YourTableName1') and t.name like '%YourSearchDataType%' union (select c.name as [column name], t.name as [type name], tbl.name as [table name] from sys.columns c inner join sys.types t on c.system_type_id = t.system_type_id inner join sys.tables tbl on c.object_id = tbl.object_id where c.object_id = OBJECT_ID('YourTableName2') and t.name like '%YourSearchDataType%') union (select c.name as [column name], t.name as [type name], tbl.name as [table name] from sys.columns c inner join sys.types t on c.system_type_id = t.system_type_id inner join sys.tables tbl on c.object_id = tbl.object_id where c.object_id = OBJECT_ID('YourTableName3') and t.name like '%YourSearchDataType%') order by tbl.name
하나의 데이터베이스에 세 가지 다른 테이블에 대한 검색 데이터 유형에 따라 어떤 테이블에있는 열을 검색합니다. 이 쿼리는 'N'테이블로 확장됩니다.
-
==============================
14.데이터 유형 및 길이에 대한 결과를 결합하여 "NULL"와 "하지 널 (null)"쿼리 아래의 사용의 형태로 널 (NULL) 찾을 수 있습니다.
데이터 유형 및 길이에 대한 결과를 결합하여 "NULL"와 "하지 널 (null)"쿼리 아래의 사용의 형태로 널 (NULL) 찾을 수 있습니다.
SELECT c.name AS 'Column Name', t.name + '(' + cast(c.max_length as varchar(50)) + ')' As 'DataType', case WHEN c.is_nullable = 0 then 'null' else 'not null' END AS 'Constraint' FROM sys.columns c JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.object_id = Object_id('TableName')
아래 그림과 같이 당신은 결과를 찾을 수 있습니다.
감사합니다.
-
==============================
15.
SELECT T.NAME AS [TABLE NAME] ,C.NAME AS [COLUMN NAME] ,P.NAME AS [DATA TYPE] ,P.MAX_LENGTH AS [Max_SIZE] ,C.[max_length] AS [ActualSizeUsed] ,CAST(P.PRECISION AS VARCHAR) +'/'+ CAST(P.SCALE AS VARCHAR) AS [PRECISION/SCALE] FROM SYS.OBJECTS AS T JOIN SYS.COLUMNS AS C ON T.OBJECT_ID = C.OBJECT_ID JOIN SYS.TYPES AS P ON C.SYSTEM_TYPE_ID = P.SYSTEM_TYPE_ID AND C.[user_type_id] = P.[user_type_id] WHERE T.TYPE_DESC='USER_TABLE' AND T.name = 'InventoryStatus' ORDER BY 2
-
==============================
16.
주 : 일부 IDE SELECT N IS WORKING OR BEFORE, 일부 IDE N IS WORKING WITHOUT
-
==============================
17.이 여기에 기본 키는 없지만,이 필드 이름 및 기본 필드 속성이있는 테이블 이름을 가지고있는 것처럼 다른 사용자가 도움이 될 수 있습니다
이 여기에 기본 키는 없지만,이 필드 이름 및 기본 필드 속성이있는 테이블 이름을 가지고있는 것처럼 다른 사용자가 도움이 될 수 있습니다
USE [**YourDB**] GO SELECT tbl.name, fld.[Column Name],fld.[Constraint],fld.DataType FROM sys.all_objects as tbl left join (SELECT c.OBJECT_ID, c.name AS 'Column Name', t.name + '(' + cast(c.max_length as varchar(50)) + ')' As 'DataType', case WHEN c.is_nullable = 0 then 'null' else 'not null' END AS 'Constraint' FROM sys.columns c JOIN sys.types t ON c.user_type_id = t.user_type_id ) as fld on tbl.OBJECT_ID = fld.OBJECT_ID WHERE ( tbl.[type]='U' and tbl.[is_ms_shipped] = 0) ORDER BY tbl.[name],fld.[Column Name] GO
-
==============================
18.난 그냥 "프리젠 테이션 준비"marc_s을했다 :
난 그냥 "프리젠 테이션 준비"marc_s을했다 :
SELECT c.name 'Column Name', t.name 'Data type', IIF(t.name = 'nvarchar', c.max_length / 2, c.max_length) 'Max Length', c.precision 'Precision', c.scale 'Scale', IIF(c.is_nullable = 0, 'No', 'Yes') 'Nullable', IIF(ISNULL(i.is_primary_key, 0) = 0, 'No', 'Yes') 'Primary Key' FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT OUTER JOIN sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id LEFT OUTER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id WHERE c.object_id = OBJECT_ID('YourTableName')
from https://stackoverflow.com/questions/2418527/sql-server-query-to-get-the-list-of-columns-in-a-table-along-with-data-types-no by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 세계의 모든 주소가 일반적인 거리 주소의 데이터베이스 설계인가? (0) | 2020.04.08 |
---|---|
[SQL] 어떻게 SQL Server 데이터베이스의 모든 테이블에 대한 행 수를 가져 오기 위해 [중복] (0) | 2020.04.08 |
[SQL] 쿼리 SQL Server가 그룹의 마지막 행을 찾기 (0) | 2020.04.08 |
[SQL] 시간을 줄이기 위해 선택 MySQL을 다시 쓰기 디스크에 TMP를 작성 (0) | 2020.04.08 |
[SQL] mysql_num_rows도 () : 제공된 인수가 유효한 MySQL의 결과 리소스 아니다 [중복] (0) | 2020.04.08 |