Hoe kan ik kolomnamen uit een tabel in SQL Server halen?

Ik wil de naam van alle kolommen van een tabel opvragen. Ik heb gevonden hoe ik dit kan doen in:

Maar ik moet ook weten: hoe kan dit worden gedaan in Microsoft SQL Server(2008 in mijn geval)?


Antwoord 1, autoriteit 100%

U kunt deze informatie en nog veel, veel meer verkrijgen door de Informatieschemaweergaven.

Deze voorbeeldzoekopdracht:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

Kan over al deze DB-objecten worden gemaakt:


Antwoord 2, autoriteit 20%

U kunt de opgeslagen procedure sp_columns gebruiken die informatie teruggeeft die betrekking heeft op alle kolommen voor een bepaalde tabel. Meer informatie vindt u hier http://msdn.microsoft.com/en-us /bibliotheek/ms176077.aspx

Je kunt het ook doen met een SQL-query. Iets als dit zou moeten helpen:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName') 

Of een variatie zou zijn:

SELECT   o.Name, c.Name
FROM     sys.columns c 
         JOIN sys.objects o ON o.object_id = c.object_id 
WHERE    o.type = 'U' 
ORDER BY o.Name, c.Name

Hiermee worden alle kolommen van alle tabellen opgehaald, geordend op tabelnaam en vervolgens op kolomnaam.


Antwoord 3, autoriteit 16%

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

Dit is beter dan van sys.columnste komen, omdat het DATA_TYPEdirect laat zien.


Antwoord 4, autoriteit 6%

U kunt sp_helpgebruiken in SQL Server 2008.

sp_help <table_name>;

Sneltoets voor het bovenstaande commando: selecteer de tabelnaam (d.w.z. markeer deze) en druk op ALT+F1.


Antwoord 5, autoriteit 5%

Door deze zoekopdracht te gebruiken, krijgt u het antwoord:

select Column_name 
from Information_schema.columns 
where Table_name like 'table name'

Antwoord 6, autoriteit 4%

U kunt deze query schrijven om de kolomnaam en alle details te krijgen zonder
INFORMATION_SCHEMA in MySql:

SHOW COLUMNS FROM database_Name.table_name;

Antwoord 7, autoriteit 3%

--This is another variation used to document a large database for conversion (Edited to --remove static columns)
SELECT o.Name                   as Table_Name
     , c.Name                   as Field_Name
     , t.Name                   as Data_Type
     , t.length                 as Length_Size
     , t.prec                   as Precision_
FROM syscolumns c 
     INNER JOIN sysobjects o ON o.id = c.id
     LEFT JOIN  systypes t on t.xtype = c.xtype  
WHERE o.type = 'U' 
ORDER BY o.Name, c.Name
--In the left join, c.type is replaced by c.xtype to get varchar types

Antwoord 8, autoriteit 3%

SELECT name
FROM sys.columns
WHERE object_id = OBJECT_ID('TABLE_NAME')

TABLE_NAMEis je tafel


Antwoord 9, autoriteit 2%

SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable 
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position

Antwoord 10, autoriteit 2%

U kunt dit proberen. Dit geeft alle kolomnamen met hun respectieve gegevenstypes.

desc <TABLE NAME> ;

Antwoord 11

Voer deze opdracht gewoon uit

EXEC sp_columns 'Your Table Name'

Antwoord 12

Deze SO-vraag mist de volgende benadering:

-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')

Antwoord 13

Het zal controleren of de gegeven tableBasistabel.

SELECT 
    T.TABLE_NAME AS 'TABLE NAME',
    C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
    WHERE   T.TABLE_TYPE='BASE TABLE'
            AND T.TABLE_NAME LIKE 'Your Table Name'

Antwoord 14

u kunt deze zoekopdracht gebruiken

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

Antwoord 15

SELECT c.Name 
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name

Antwoord 16

Een andere optie die aantoonbaar intuïtiever is, is:

SELECT [name] 
FROM sys.columns 
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]') 

Hierdoor krijgt u al uw kolomnamen in één kolom.
Als je andere metadata belangrijk vindt, kun je de SELECT STATEMENT wijzigen in SELECT *.


Antwoord 17

De antwoorden samenvatten

Ik zie veel verschillende antwoorden en manieren om dit te doen, maar hier zit de kneep in en dat is het objective.

Ja, het doel. Als u only knowwilt weten welke kolomnamen u kunt gebruiken

SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table

Maar als je die kolommen ergens wilt useof gewoon manipulatewilt zeggen, dan hebben de snelle vragen hierboven geen zin. Je moet gebruiken

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'

nog een manier om een aantal specifieke kolommen te kennen waar we vergelijkbare kolommen nodig hebben

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'

Antwoord 18

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'

Antwoord 19

SELECT TOP (0) [toID]
      ,[sourceID]
      ,[name]
      ,[address]
  FROM [ReportDatabase].[Ticket].[To]

Eenvoudig en vereist geen sys-tabellen


Antwoord 20

Sommige SQL-genererende SQL:

DROP TABLE IF EXISTS test;
CREATE TABLE test (
  col001 INTEGER
, col002 INTEGER
, col003 INTEGER
, col004 INTEGER
, col005 INTEGER
, col006 INTEGER
, col007 INTEGER
, col008 INTEGER
, col009 INTEGER
, col010 INTEGER
)
;
INSERT INTO test(col001) VALUES(1);
INSERT INTO test(col002) VALUES(1);
INSERT INTO test(col005) VALUES(1);
INSERT INTO test(col009) VALUES(1);
INSERT INTO test VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
SELECT
  CASE ROW_NUMBER() OVER(ORDER BY ordinal_position)
  WHEN 1 THEN 
    'SELECT'+CHAR(10)+'  *'+CHAR(10)+'FROM test'
   +CHAR(10)+'WHERE '
  ELSE
    '   OR '
  END
+ column_name +' IS NOT NULL'
+ CASE ROW_NUMBER() OVER(ORDER BY ordinal_position DESC)
  WHEN 1 THEN 
    CHAR(10)+';'
  ELSE
    ''
  END
  FROM information_schema.columns
  WHERE table_schema='dbo'
    AND table_name = 'test'
ORDER BY
  ordinal_position;
-- the whole scenario. Works for 10 , will work for 100, too:
-- out -----------------------------------------------
-- out  SELECT
-- out   *
-- out FROM test
-- out WHERE col001 IS NOT NULL
-- out     OR col002 IS NOT NULL
-- out     OR col003 IS NOT NULL
-- out     OR col004 IS NOT NULL
-- out     OR col005 IS NOT NULL
-- out     OR col006 IS NOT NULL
-- out     OR col007 IS NOT NULL
-- out     OR col008 IS NOT NULL
-- out     OR col009 IS NOT NULL
-- out     OR col010 IS NOT NULL
-- out ;

Antwoord 21

Eenvoudig en vereist geen sys-variabelen:

SHOW COLUMNS FROM suppliers;

Other episodes