2013-08-18 15 views
20
SELECT DateTime, Skill, Name, TimeZone, ID, User, Employee, Leader 
FROM t_Agent_Skill_Group_Half_Hour AS t 

Potrzebuję wyświetlić strukturę tabeli w zapytaniu.Jak wyświetlić strukturę tabeli w zapytaniu SQL Server?

+2

Co masz na myśli jako "tabelę"? Twoje pytanie nie jest jednoznaczne IMO. –

+1

mam na myśli jako nazwę kolumny umiejętności .... zapytanie musi zwrócić umiejętność .. DBINT: int –

+0

Nazywamy to "schematem stołu". – namford

Odpowiedz

58

Dla SQL Server, w przypadku korzystania z nowszej wersji, można użyć

select * 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME='tableName' 

Istnieją różne sposoby, aby zdobyć schematu. Korzystając z ADO.NET, możesz użyć schema methods. Użyj DbConnection 's lub ' s GetSchemaTable method.

Pod warunkiem, że masz czytnik dla dla kwerendy, można zrobić coś takiego:

using(DbCommand cmd = ...) 
using(var reader = cmd.ExecuteReader()) 
{ 
    var schema = reader.GetSchemaTable(); 
    foreach(DataRow row in schema.Rows) 
    { 
     Debug.WriteLine(row["ColumnName"] + " - " + row["DataTypeName"]) 
    } 
} 

Zobacz this article dla dalszych szczegółów.

+0

Potrzebuję zapytania do przetestowania w Microsoft SQL Management Studio: s –

+0

@BassamQarib - dlaczego oznaczasz pytanie C#, jeśli chcesz to zrobić w Management Studio? – PHeiberg

+0

Przepraszam, jestem nowy użytkownik: ssss –

11

Spróbuj zapytanie:

DECLARE @table_name SYSNAME 
SELECT @table_name = 'dbo.test_table' 

DECLARE 
     @object_name SYSNAME 
    , @object_id INT 

SELECT 
     @object_name = '[' + s.name + '].[' + o.name + ']' 
    , @object_id = o.[object_id] 
FROM sys.objects o WITH (NOWAIT) 
JOIN sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id] 
WHERE s.name + '.' + o.name = @table_name 
    AND o.[type] = 'U' 
    AND o.is_ms_shipped = 0 

DECLARE @SQL NVARCHAR(MAX) = '' 

;WITH index_column AS 
(
    SELECT 
      ic.[object_id] 
     , ic.index_id 
     , ic.is_descending_key 
     , ic.is_included_column 
     , c.name 
    FROM sys.index_columns ic WITH (NOWAIT) 
    JOIN sys.columns c WITH (NOWAIT) ON ic.[object_id] = c.[object_id] AND ic.column_id = c.column_id 
    WHERE ic.[object_id] = @object_id 
) 
SELECT @SQL = 'CREATE TABLE ' + @object_name + CHAR(13) + '(' + CHAR(13) + STUFF((
    SELECT CHAR(9) + ', [' + c.name + '] ' + 
     CASE WHEN c.is_computed = 1 
      THEN 'AS ' + cc.[definition] 
      ELSE UPPER(tp.name) + 
       CASE WHEN tp.name IN ('varchar', 'char', 'varbinary', 'binary', 'text') 
         THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length AS VARCHAR(5)) END + ')' 
        WHEN tp.name IN ('nvarchar', 'nchar', 'ntext') 
         THEN '(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length/2 AS VARCHAR(5)) END + ')' 
        WHEN tp.name IN ('datetime2', 'time2', 'datetimeoffset') 
         THEN '(' + CAST(c.scale AS VARCHAR(5)) + ')' 
        WHEN tp.name = 'decimal' 
         THEN '(' + CAST(c.[precision] AS VARCHAR(5)) + ',' + CAST(c.scale AS VARCHAR(5)) + ')' 
        ELSE '' 
       END + 
       CASE WHEN c.collation_name IS NOT NULL THEN ' COLLATE ' + c.collation_name ELSE '' END + 
       CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + 
       CASE WHEN dc.[definition] IS NOT NULL THEN ' DEFAULT' + dc.[definition] ELSE '' END + 
       CASE WHEN ic.is_identity = 1 THEN ' IDENTITY(' + CAST(ISNULL(ic.seed_value, '0') AS CHAR(1)) + ',' + CAST(ISNULL(ic.increment_value, '1') AS CHAR(1)) + ')' ELSE '' END 
     END + CHAR(13) 
    FROM sys.columns c WITH (NOWAIT) 
    JOIN sys.types tp WITH (NOWAIT) ON c.user_type_id = tp.user_type_id 
    LEFT JOIN sys.computed_columns cc WITH (NOWAIT) ON c.[object_id] = cc.[object_id] AND c.column_id = cc.column_id 
    LEFT JOIN sys.default_constraints dc WITH (NOWAIT) ON c.default_object_id != 0 AND c.[object_id] = dc.parent_object_id AND c.column_id = dc.parent_column_id 
    LEFT JOIN sys.identity_columns ic WITH (NOWAIT) ON c.is_identity = 1 AND c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id 
    WHERE c.[object_id] = @object_id 
    ORDER BY c.column_id 
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, CHAR(9) + ' ') 
    + ISNULL((SELECT CHAR(9) + ', CONSTRAINT [' + k.name + '] PRIMARY KEY (' + 
        (SELECT STUFF((
         SELECT ', [' + c.name + '] ' + CASE WHEN ic.is_descending_key = 1 THEN 'DESC' ELSE 'ASC' END 
         FROM sys.index_columns ic WITH (NOWAIT) 
         JOIN sys.columns c WITH (NOWAIT) ON c.[object_id] = ic.[object_id] AND c.column_id = ic.column_id 
         WHERE ic.is_included_column = 0 
          AND ic.[object_id] = k.parent_object_id 
          AND ic.index_id = k.unique_index_id  
         FOR XML PATH(N''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')) 
      + ')' + CHAR(13) 
      FROM sys.key_constraints k WITH (NOWAIT) 
      WHERE k.parent_object_id = @object_id 
       AND k.[type] = 'PK'), '') + ')' + CHAR(13) 

PRINT @SQL 

wyjściowa:

CREATE TABLE [dbo].[test_table] 
(
     [WorkOutID] BIGINT NOT NULL IDENTITY(1,1) 
    , [DateOut] DATETIME NOT NULL 
    , [EmployeeID] INT NOT NULL 
    , [IsMainWorkPlace] BIT NOT NULL DEFAULT((1)) 
    , [WorkPlaceUID] UNIQUEIDENTIFIER NULL 
    , [WorkShiftCD] NVARCHAR(10) COLLATE Cyrillic_General_CI_AS NULL 
    , [CategoryID] INT NULL 
    , CONSTRAINT [PK_WorkOut] PRIMARY KEY ([WorkOutID] ASC) 
) 

przeczytać również to:

http://www.c-sharpcorner.com/UploadFile/67b45a/how-to-generate-a-create-table-script-for-an-existing-table/

+0

W tabeli kliknij prawym przyciskiem myszy na SSMS, wybierz ** Tabela skryptów jako> Utwórz> Nowe okno edytora zapytań **. – Rubio

26

sp_help tablename w serwerze sql

desc tablename w oracle

+0

Czym dokładnie jest różnica między "sp_help tablename" i " wybierz * z INFORMATION_SCHEMA.COLUMNS gdzie TABLE_NAME =" tableName " " '' –

8

na SQL Server 2012, można wykorzystać następującą procedurę przechowywaną:

sp_columns '<table name>' 

Na przykład, mając tabeli bazy danych o nazwie users:

sp_columns 'users' 
Powiązane problemy