[SQL] SQL Server의 '테이블을 설명'에 해당 무엇입니까?
SQLSQL Server의 '테이블을 설명'에 해당 무엇입니까?
나는 SQL Server 데이터베이스를 가지고 있고 그것이 무슨 열과 종류 알고 싶어요. 나는 엔터프라이즈 관리자와 같은 GUI를 사용하지 않고 쿼리를 통해이 일을 선호하는 것입니다. 이 작업을 수행 할 수있는 방법이 있나요?
해결법
-
==============================
1.당신은 sp_columns를 저장 프로 시저를 사용할 수 있습니다 :
당신은 sp_columns를 저장 프로 시저를 사용할 수 있습니다 :
exec sp_columns MyTable
-
==============================
2.테이블에 대한 메타 데이터를 얻을 수있는 몇 가지 방법이 있습니다 :
테이블에 대한 메타 데이터를 얻을 수있는 몇 가지 방법이 있습니다 :
EXEC sp_help tablename
여러 결과 집합을 반환 테이블을 설명하는 것, 그것은 열 및 제약 조건입니다.
불행하게도 당신의 의견을 조회해야하고 수동으로 가입 불구하고 INFORMATION_SCHEMA 뷰는, 당신이 원하는 정보를 제공 할 것입니다.
-
==============================
3.이런 경우에 당신이 저장된 프로 시저를 사용하지 않는, 여기에 간단한 쿼리 버전입니다
이런 경우에 당신이 저장된 프로 시저를 사용하지 않는, 여기에 간단한 쿼리 버전입니다
select * from information_schema.columns where table_name = 'aspnet_Membership' order by ordinal_position
-
==============================
4.당신은 다음을 사용할 수 있습니다
당신은 다음을 사용할 수 있습니다
sp_help는 tablename에
예: sp_help는 고객
또는 사용 바로 가기
예 : 고객 Alt 키 + F1
-
==============================
5.이 쿼리를 사용하여
이 쿼리를 사용하여
Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'TABLENAME'
-
==============================
6.다른 답변에 표시하는 방법 이외에, 당신은 사용할 수 있습니다
다른 답변에 표시하는 방법 이외에, 당신은 사용할 수 있습니다
SELECT TOP 0 * FROM table_name
이것은 최소한의 오버 헤드를 거의 즉시없고 그 결과, 및 완료와 함께 당신에게 각 열의 이름을 줄 것이다.
-
==============================
7.다음 SQL 쿼리를 사용하십시오; 이 내 사건 일했다.
다음 SQL 쿼리를 사용하십시오; 이 내 사건 일했다.
select * FROM INFORMATION_SCHEMA.Columns where table_name = 'tablename';
-
==============================
8.그냥 선택 테이블하고 Alt + F1,
그냥 선택 테이블하고 Alt + F1,
그것은 열 이름, 데이터 타입, 키 등과 같은 테이블에 대한 모든 정보가 표시됩니다
-
==============================
9.나는 SQL을 쓴 * 플러스 DESC T-SQL에서 (너무 표시 열 코멘트)을 선택합니다 같은 (리베) :
나는 SQL을 쓴 * 플러스 DESC T-SQL에서 (너무 표시 열 코멘트)을 선택합니다 같은 (리베) :
USE YourDB GO DECLARE @objectName NVARCHAR(128) = 'YourTable'; SELECT a.[NAME] ,a.[TYPE] ,a.[CHARSET] ,a.[COLLATION] ,a.[NULLABLE] ,a.[DEFAULT] ,b.[COMMENTS] -- ,a.[ORDINAL_POSITION] FROM ( SELECT COLUMN_NAME AS [NAME] ,CASE DATA_TYPE WHEN 'char' THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' WHEN 'numeric' THEN DATA_TYPE + '(' + CAST(NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(NUMERIC_SCALE AS VARCHAR) + ')' WHEN 'nvarchar' THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' WHEN 'varbinary' THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' WHEN 'varchar' THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')' ELSE DATA_TYPE END AS [TYPE] ,CHARACTER_SET_NAME AS [CHARSET] ,COLLATION_NAME AS [COLLATION] ,IS_NULLABLE AS [NULLABLE] ,COLUMN_DEFAULT AS [DEFAULT] ,ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @objectName ) a FULL JOIN ( SELECT CAST(value AS NVARCHAR) AS [COMMENTS] ,CAST(objname AS NVARCHAR) AS [NAME] FROM ::fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', @objectName, 'column', default) ) b ON a.NAME COLLATE YourCollation = b.NAME COLLATE YourCollation ORDER BY a.[ORDINAL_POSITION];
간단한 방법에 인스턴스의 모든 데이터베이스에서 시스템을 선택 사용할 수 있습니다 언급 위의 저장 프로 시저를 표시되고이를 호출 할 수 있습니다 :
USE master; GO IF OBJECT_ID('sp_desc', 'P') IS NOT NULL DROP PROCEDURE sp_desc GO CREATE PROCEDURE sp_desc ( @tableName nvarchar(128) ) AS BEGIN DECLARE @dbName sysname; DECLARE @schemaName sysname; DECLARE @objectName sysname; DECLARE @objectID int; DECLARE @tmpTableName varchar(100); DECLARE @sqlCmd nvarchar(4000); SELECT @dbName = PARSENAME(@tableName, 3); IF @dbName IS NULL SELECT @dbName = DB_NAME(); SELECT @schemaName = PARSENAME(@tableName, 2); IF @schemaName IS NULL SELECT @schemaName = SCHEMA_NAME(); SELECT @objectName = PARSENAME(@tableName, 1); IF @objectName IS NULL BEGIN PRINT 'Object is missing from your function call!'; RETURN; END; SELECT @objectID = OBJECT_ID(@dbName + '.' + @schemaName + '.' + @objectName); IF @objectID IS NULL BEGIN PRINT 'Object [' + @dbName + '].[' + @schemaName + '].[' + @objectName + '] does not exist!'; RETURN; END; SELECT @tmpTableName = '#tmp_DESC_' + CAST(@@SPID AS VARCHAR) + REPLACE(REPLACE(REPLACE(REPLACE(CAST(CONVERT(CHAR, GETDATE(), 121) AS VARCHAR), '-', ''), ' ', ''), ':', ''), '.', ''); --PRINT @tmpTableName; SET @sqlCmd = ' USE ' + @dbName + ' CREATE TABLE ' + @tmpTableName + ' ( [NAME] nvarchar(128) NOT NULL ,[TYPE] varchar(50) ,[CHARSET] varchar(50) ,[COLLATION] varchar(50) ,[NULLABLE] varchar(3) ,[DEFAULT] nvarchar(4000) ,[COMMENTS] nvarchar(3750)); INSERT INTO ' + @tmpTableName + ' SELECT a.[NAME] ,a.[TYPE] ,a.[CHARSET] ,a.[COLLATION] ,a.[NULLABLE] ,a.[DEFAULT] ,b.[COMMENTS] FROM ( SELECT COLUMN_NAME AS [NAME] ,CASE DATA_TYPE WHEN ''char'' THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')'' WHEN ''numeric'' THEN DATA_TYPE + ''('' + CAST(NUMERIC_PRECISION AS VARCHAR) + '', '' + CAST(NUMERIC_SCALE AS VARCHAR) + '')'' WHEN ''nvarchar'' THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')'' WHEN ''varbinary'' THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')'' WHEN ''varchar'' THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')'' ELSE DATA_TYPE END AS [TYPE] ,CHARACTER_SET_NAME AS [CHARSET] ,COLLATION_NAME AS [COLLATION] ,IS_NULLABLE AS [NULLABLE] ,COLUMN_DEFAULT AS [DEFAULT] ,ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''' + @objectName + ''' ) a FULL JOIN ( SELECT CAST(value AS NVARCHAR) AS [COMMENTS] ,CAST(objname AS NVARCHAR) AS [NAME] FROM ::fn_listextendedproperty (''MS_Description'', ''user'', ''' + @schemaName + ''', ''table'', ''' + @objectName + ''', ''column'', default) ) b ON a.NAME COLLATE Hungarian_CI_AS = b.NAME COLLATE Hungarian_CI_AS ORDER BY a.[ORDINAL_POSITION]; SELECT * FROM ' + @tmpTableName + ';' --PRINT @sqlCmd; EXEC sp_executesql @sqlCmd; RETURN; END; GO EXEC sys.sp_MS_marksystemobject sp_desc GO
프로 시저 유형을 실행하려면 :
EXEC sp_desc 'YourDB.YourSchema.YourTable';
당신은 현재 데이터베이스 (및 스키마) 간단한 형식의 개체에 대한 설명을 얻고 싶은 경우에 :
EXEC sp_desc 'YourTable';
sp_desc가 시스템에 표시 절차이기 때문에, 당신도 역시 exec 명령을 남길 수 있습니다 (어쨌든 권장하지 않음) :
sp_desc 'YourTable';
-
==============================
10.오라클의에 SQL 서버 상응하는 명령이 저장된 프로 시저를 sp_help는 것입니다 설명
오라클의에 SQL 서버 상응하는 명령이 저장된 프로 시저를 sp_help는 것입니다 설명
명령은 당신에게 등 열 이름, 유형, 길이에 대한 정보를 제공합니다 설명
SQL Server에서의 당신이, 당신이 다음을 수행 할 수있는 데이터베이스 'MYDB'에서 스키마 'MYSCHEMA'에서 'MYTABLE'테이블을 설명 할 가정 해 봅시다 :
USE mydb; exec sp_help 'myschema.mytable';
-
==============================
11.당신은 sp_help는 'TABLENAME'를 사용할 수 있습니다
당신은 sp_help는 'TABLENAME'를 사용할 수 있습니다
-
==============================
12.그 대답의 문제는 당신이 키 정보를 놓치고 있다는 것입니다. 이 비트 지저분하지만 이것은 내가 만들어 내놓았다 빠른 버전은 확실히 그것은 MySQL이 표시 설명 같은 정보를 포함합니다.
그 대답의 문제는 당신이 키 정보를 놓치고 있다는 것입니다. 이 비트 지저분하지만 이것은 내가 만들어 내놓았다 빠른 버전은 확실히 그것은 MySQL이 표시 설명 같은 정보를 포함합니다.
Select SC.name AS 'Field', ISC.DATA_TYPE AS 'Type', ISC.CHARACTER_MAXIMUM_LENGTH AS 'Length', SC.IS_NULLABLE AS 'Null', I.is_primary_key AS 'Key', SC.is_identity AS 'Identity' From sys.columns AS SC LEFT JOIN sys.index_columns AS IC ON IC.object_id = OBJECT_ID('dbo.Expenses') AND IC.column_id = SC.column_id LEFT JOIN sys.indexes AS I ON I.object_id = OBJECT_ID('dbo.Expenses') AND IC.index_id = I.index_id LEFT JOIN information_schema.columns ISC ON ISC.TABLE_NAME = 'Expenses' AND ISC.COLUMN_NAME = SC.name WHERE SC.object_id = OBJECT_ID('dbo.Expenses')
-
==============================
13.이것은 (여기 가능) EntityFramework 역 POCO 발전기 내에서 코드 I의 사용이다
이것은 (여기 가능) EntityFramework 역 POCO 발전기 내에서 코드 I의 사용이다
표 SQL :
SELECT c.TABLE_SCHEMA AS SchemaName, c.TABLE_NAME AS TableName, t.TABLE_TYPE AS TableType, c.ORDINAL_POSITION AS Ordinal, c.COLUMN_NAME AS ColumnName, CAST(CASE WHEN IS_NULLABLE = 'YES' THEN 1 ELSE 0 END AS BIT) AS IsNullable, DATA_TYPE AS TypeName, ISNULL(CHARACTER_MAXIMUM_LENGTH, 0) AS [MaxLength], CAST(ISNULL(NUMERIC_PRECISION, 0) AS INT) AS [Precision], ISNULL(COLUMN_DEFAULT, '') AS [Default], CAST(ISNULL(DATETIME_PRECISION, 0) AS INT) AS DateTimePrecision, ISNULL(NUMERIC_SCALE, 0) AS Scale, CAST(COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') AS BIT) AS IsIdentity, CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') = 1 THEN 1 WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsComputed') = 1 THEN 1 WHEN DATA_TYPE = 'TIMESTAMP' THEN 1 ELSE 0 END AS BIT) AS IsStoreGenerated, CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0 ELSE 1 END AS BIT) AS PrimaryKey, ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal, CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0 ELSE 1 END AS BIT) AS IsForeignKey FROM INFORMATION_SCHEMA.COLUMNS c LEFT OUTER JOIN (SELECT u.TABLE_SCHEMA, u.TABLE_NAME, u.COLUMN_NAME, u.ORDINAL_POSITION FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA AND u.TABLE_NAME = tc.TABLE_NAME AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE CONSTRAINT_TYPE = 'PRIMARY KEY') pk ON c.TABLE_SCHEMA = pk.TABLE_SCHEMA AND c.TABLE_NAME = pk.TABLE_NAME AND c.COLUMN_NAME = pk.COLUMN_NAME LEFT OUTER JOIN (SELECT DISTINCT u.TABLE_SCHEMA, u.TABLE_NAME, u.COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE u INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA AND u.TABLE_NAME = tc.TABLE_NAME AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME WHERE CONSTRAINT_TYPE = 'FOREIGN KEY') fk ON c.TABLE_SCHEMA = fk.TABLE_SCHEMA AND c.TABLE_NAME = fk.TABLE_NAME AND c.COLUMN_NAME = fk.COLUMN_NAME INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME WHERE c.TABLE_NAME NOT IN ('EdmMetadata', '__MigrationHistory')
외래 키 SQL :
SELECT FK.name AS FK_Table, FkCol.name AS FK_Column, PK.name AS PK_Table, PkCol.name AS PK_Column, OBJECT_NAME(f.object_id) AS Constraint_Name, SCHEMA_NAME(FK.schema_id) AS fkSchema, SCHEMA_NAME(PK.schema_id) AS pkSchema, PkCol.name AS primarykey, k.constraint_column_id AS ORDINAL_POSITION FROM sys.objects AS PK INNER JOIN sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS k ON k.constraint_object_id = f.object_id INNER JOIN sys.indexes AS i ON f.referenced_object_id = i.object_id AND f.key_index_id = i.index_id ON PK.object_id = f.referenced_object_id INNER JOIN sys.objects AS FK ON f.parent_object_id = FK.object_id INNER JOIN sys.columns AS PkCol ON f.referenced_object_id = PkCol.object_id AND k.referenced_column_id = PkCol.column_id INNER JOIN sys.columns AS FkCol ON f.parent_object_id = FkCol.object_id AND k.parent_column_id = FkCol.column_id ORDER BY FK_Table, FK_Column
확장 속성 :
SELECT s.name AS [schema], t.name AS [table], c.name AS [column], value AS [property] FROM sys.extended_properties AS ep INNER JOIN sys.tables AS t ON ep.major_id = t.object_id INNER JOIN sys.schemas AS s ON s.schema_id = t.schema_id INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE class = 1 ORDER BY t.name
-
==============================
14.사용하다
사용하다
SELECT COL_LENGTH('tablename', 'colname')
다른 솔루션 아무도 나를 위해 일하지 않는다.
-
==============================
15.나는이 형식을 좋아한다 :
나는이 형식을 좋아한다 :
name DataType Collation Constraints PK FK Comment id int NOT NULL IDENTITY PK Order Line Id pid int NOT NULL tbl_orders Order Id itemCode varchar(10) Latin1_General_CI_AS NOT NULL Product Code
그래서 나는 이것을 사용했습니다 :
DECLARE @tname varchar(100) = 'yourTableName'; SELECT col.name, CASE typ.name WHEN 'nvarchar' THEN 'nvarchar('+CAST((col.max_length / 2) as varchar)+')' WHEN 'varchar' THEN 'varchar('+CAST(col.max_length as varchar)+')' WHEN 'char' THEN 'char('+CAST(col.max_length as varchar)+')' WHEN 'nchar' THEN 'nchar('+CAST((col.max_length / 2) as varchar)+')' WHEN 'binary' THEN 'binary('+CAST(col.max_length as varchar)+')' WHEN 'varbinary' THEN 'varbinary('+CAST(col.max_length as varchar)+')' WHEN 'numeric' THEN 'numeric('+CAST(col.precision as varchar)+(CASE WHEN col.scale = 0 THEN '' ELSE ','+CAST(col.scale as varchar) END) +')' WHEN 'decimal' THEN 'decimal('+CAST(col.precision as varchar)+(CASE WHEN col.scale = 0 THEN '' ELSE ','+CAST(col.scale as varchar) END) +')' ELSE typ.name END DataType, ISNULL(col.collation_name,'') Collation, CASE WHEN col.is_nullable = 0 THEN 'NOT NULL ' ELSE '' END + CASE WHEN col.is_identity = 1 THEN 'IDENTITY' ELSE '' END Constraints, ISNULL((SELECT 'PK' FROM sys.key_constraints kc INNER JOIN sys.tables tb ON tb.object_id = kc.parent_object_id INNER JOIN sys.indexes si ON si.name = kc.name INNER JOIN sys.index_columns sic ON sic.index_id = si.index_id AND sic.object_id = si.object_id WHERE kc.type = 'PK' AND tb.name = @tname AND sic.column_id = col.column_id),'') PK, ISNULL((SELECT (SELECT name FROM sys.tables st WHERE st.object_id = fkc.referenced_object_id) FROM sys.foreign_key_columns fkc INNER JOIN sys.columns c ON c.column_id = fkc.parent_column_id AND fkc.parent_object_id = c.object_id INNER JOIN sys.tables t ON t.object_id = c.object_id WHERE t.name = tab.name AND c.name = col.name),'') FK, ISNULL((SELECT value FROM sys.extended_properties WHERE major_id = tab.object_id AND minor_id = col.column_id),'') Comment FROM sys.columns col INNER JOIN sys.tables tab ON tab.object_id = col.object_id INNER JOIN sys.types typ ON typ.system_type_id = col.system_type_id WHERE tab.name = @tname AND typ.name != 'sysname' ORDER BY col.column_id;
-
==============================
16.
SELECT C.COLUMN_NAME, C.IS_NULLABLE, C.DATA_TYPE, TC.CONSTRAINT_TYPE, C.COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS AS C FULL JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CC ON C.COLUMN_NAME = CC.COLUMN_NAME FULL JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC ON CC.CONSTRAINT_NAME = TC.CONSTRAINT_NAME WHERE C.TABLE_NAME = '<Table Name>';
샘플 출력
-
==============================
17.당신이 브렌트 Ozar 팀에서 FirstResponderKit를 사용하는 경우, 당신은 또한이 쿼리를 실행할 수 있습니다 :
당신이 브렌트 Ozar 팀에서 FirstResponderKit를 사용하는 경우, 당신은 또한이 쿼리를 실행할 수 있습니다 :
exec sp_blitzindex @tablename='MyTable'
이 테이블에 대한 모든 정보를 반환합니다 :
물론 그것은 시스템이 아닌 sp_help는 나 sp_columns 같은 보편적 인 STP은 아니지만, 테이블에 대한 모든 가능한 정보를 반환하고 나는 그것의 가치는 사용자의 환경에 그것을 만들고 여기 언급 생각합니다.
-
==============================
18.그냥 두 번 테이블 이름과하고 Alt + F1을 클릭
그냥 두 번 테이블 이름과하고 Alt + F1을 클릭
-
==============================
19.
CREATE PROCEDURE [dbo].[describe] ( @SearchStr nvarchar(max) ) AS BEGIN SELECT CONCAT([COLUMN_NAME],' ',[DATA_TYPE],' ',[CHARACTER_MAXIMUM_LENGTH],' ', (SELECT CASE [IS_NULLABLE] WHEN 'NO' THEN 'NOT NULL' ELSE 'NULL' END), (SELECT CASE WHEN [COLUMN_DEFAULT] IS NULL THEN '' ELSE CONCAT(' DEFAULT ',[COLUMN_DEFAULT]) END) ) AS DESCRIPTION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE @SearchStr END
from https://stackoverflow.com/questions/319354/what-is-the-equivalent-of-describe-table-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server의 트랜잭션의 올바른 사용 (0) | 2020.05.06 |
---|---|
[SQL] 오라클 키워드 "으로 파티션" (0) | 2020.05.06 |
[SQL] 스크립트가 데이터베이스에 모든 연결을 죽일 (더 RESTRICTED_USER ROLLBACK 이상) (0) | 2020.05.06 |
[SQL] 오라클 업데이트 쿼리에 참여하여 (0) | 2020.05.06 |
[SQL] 와 업데이트는 오라클에서 쿼리 가입 (0) | 2020.05.06 |