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:
- CHECK_CONSTRAINTS
- COLUMN_DOMAIN_USAGE
- COLUMN_PRIVILEGES
- KOLOMMEN
- CONSTRAINT_COLUMN_USAGE
- CONSTRRAINT_TABLE_USAGE
- DOMAIN_CONSTRAINTS
- DOMEINEN
- KEY_COLUMN_USAGE
- PARAMETERS
- REFERENTIAL_CONSTRAINTS
- ROUTINES
- ROUTINE_COLUMNS
- SCHEMA
- TABLE_CONSTRAINTS
- TABLE_PRIVILEGES
- TABELLEN
- VIEW_COLUMN_USAGE
- VIEW_TABLE_USAGE
- VIEWS
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.columns
te komen, omdat het DATA_TYPE
direct laat zien.
Antwoord 4, autoriteit 6%
U kunt sp_help
gebruiken 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_NAME
is 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 table
Basistabel.
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 know
wilt 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 use
of gewoon manipulate
wilt 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;