Wie würde ich die Spaltennamen einer Tabelle mit SQL Server 2008 zurückgeben? eine Tabelle enthält diese Spalten - ID, Name, Adresse, Land und ich möchte diese als Daten zurückgeben.Wie geben Sie die Spaltennamen einer Tabelle zurück?
Antwort
Nicht sicher, ob es einen einfacheren Weg in der Version 2008 gibt.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
So ähnlich?
sp_columns @table_name=your table name
Eine Methode ist syscolumns abfragen:
select
syscolumns.name as [Column],
syscolumns.xusertype as [Type],
sysobjects.xtype as [Objtype]
from
sysobjects
inner join
syscolumns on sysobjects.id = syscolumns.id
where sysobjects.xtype = 'u'
and sysobjects.name = 'MyTableName'
order by syscolumns.name
Ich mag diese wirklich. Ich finde 'Objtype' Spalte jedoch redundant :) – Joel
Wäre es nicht besser, den Join vollständig auszuschreiben (sysobjects so inner joins syscolumns sc auf so.id = sc.id)? Dies scheint eine faule Antwort auf Kosten der Leistung zu sein. Ich könnte mich irren ... – Losbear
@Losbear hat es geändert PS: Nicht faul, es ist nur Code von vor 8 Jahren. :) In alten Zeiten (ich habe SQL Server ab Version 4.2 benutzt) habe ich SQL-Abfragen auf diese Weise geschrieben. keine Leistungsprobleme. – splattne
Ich bin mir nicht sicher, ob der syscolumns.colid Wert ist das gleiche wie der ‚ORDINAL_POSITION‘ Wert als Teil sp_columns zurückgegeben, sondern in dem, was folgt ich benutze es auf diese Weise - hoffe, dass ich nicht fisminforming bin ...
Hier ist eine leichte Variation auf einige der anderen Antworten, die ich gefunden habe - ich benutze dies, weil die 'Position' oder Reihenfolge der Spalte in Die Tabelle ist wichtig in meiner Anwendung - ich muss im Grunde wissen 'Was ist Spalte (n) namens?'
sp_columns eine ganze Reihe von fremden Sachen zurück, und ich bin handlicher mit einem ausgewählten als T-SQL-Funktionen, so ging ich diesen Weg:
select
syscolumns.name,
syscolumns.colid
from
sysobjects, syscolumns
where
sysobjects.id = syscolumns.id and
sysobjects.xtype = 'u' and
sysobjects.name = '<YOUR_TABLE>'
order by syscolumns.colid
Ich habe diese Methode lange benutzt, wurde aber davon abgeraten. In der Tat traf ich das genaue Problem, das mir gesagt wurde, dass ich könnte ... es ist wahrscheinlicher, dass neue Versionen von MSSQL die Syntax ändern. Zum Beispiel war es früher sys.object und sys.columns in den Versionen, in denen ich diese Technik zum ersten Mal benutzt habe. Angeblich sind die Methoden des Schemas und der gespeicherten Prozedur mehr Beweis dafür ... nicht sicher, aber so weit so gut. – RosieC
CREATE PROCEDURE [dbo].[Usp_GetColumnName]
@TableName varchar(50)
AS
BEGIN
BEGIN
SET NOCOUNT ON
IF (@TableName IS NOT NULL)
select ORDINAL_POSITION OrderPosition,COLUMN_NAME ColumnName from information_schema.columns
where table_name [email protected]
order by ORDINAL_POSITION
END
END
Willkommen bei SO!Aber es sieht so aus, als hätte diese Frage bereits vor drei Jahren eine befriedigende Antwort erhalten ... Wenn Sie Code veröffentlichen, verwenden Sie die {}, um sie hervorzuheben. Werfen Sie einen Blick auf die FAQ, es gibt einige gute Informationen zum Einstieg hier: http://stackoverflow.com/faq –
Dies ist der einfachste Weg,
exec sp_columns [tablename]
Dies ist kurz und einfach, sollte die richtige Antwort sein. Ich stelle mir vor, dass es nicht existierte, als die Frage ursprünglich gestellt wurde :) – DanteTheSmith
Warum dies gerade nicht versuchen:
rechts auf der Registerkarte klicken le -> Skripttabelle As -> Erstellen nach -> Neuer Abfrageeditor Fenster?
Die gesamte Liste der Spalten wird im Skript angegeben. Kopieren Sie es und verwenden Sie die Felder nach Bedarf.
Der Autor wollte wahrscheinlich wissen, wie man die Spaltennamen von der Tabelle programmatisch zur Verwendung in einer gespeicherten Prozedur oder einem anderen Skript erhält. – KLee1
Die Antwort lautet: "Ich möchte diese als Daten zurückgeben", während Ihre Antwort die Werte erhält, ist es wahrscheinlich, dass das OP die Daten zur Laufzeit möchte. – StuperUser
Ich benutze
SELECT st.NAME, sc.NAME, sc.system_type_id
FROM sys.tables st
INNER JOIN sys.columns sc ON st.object_id = sc.object_id
WHERE st.name LIKE '%Tablename%'
Dies ist ein wenig einfacher dann die oben genannten Vorschläge scheint, weil es die OBJECT_ID() Funktion verwendet die Tabellen-ID zu suchen. Jede Spalte mit dieser ID ist Teil der Tabelle.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Ich benutze häufig eine ähnliche Abfrage, um zu sehen, ob eine Spalte Ich weiß Teil einer neueren Version vorliegt ist. Es ist dieselbe Abfrage mit dem Zusatz von {AND name = 'YOUR_COLUMN'} zur where-Klausel.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
set fmtonly on
select * from yourTable
benutze ich nur eine Abfrage wie Martin Smith erwähnt, nur etwas kürzer:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
Die folgende scheint oben wie die erste vorgeschlagene Abfrage zu sein, aber irgendwann müssen Sie die Datenbank angeben um es zur Arbeit zu bringen.Beachten Sie, dass die Abfrage auch ohne Angabe des TABLE_SCHEMA funktionieren sollte:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Während @Gulzar Nazim Antwort groß ist, ist es wahrscheinlich einfacher, gehören die Datenbanknamen in der Abfrage, die durch die folgende SQL erreicht werden könnte .
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
USE[Database] SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Da SysColumns is deprecated verwenden Sys.All_Columns
:
Select
ObjectName = Object_Name(Object_ID)
,T.Name
,C.*
,T.*
From
Sys.All_Columns C
Inner Join Sys.Types T On T.User_Type_Id = C.User_Type_Id
Where [Object_ID] = Object_ID('Sys.Server_Permissions')
--Order By Name Asc
Select * From Sys.Types
wird user_type_id = ID
des Typs ergeben. Dies ist einzigartig in der Datenbank. Für Systemdatentypen: user_type_id = system_type_id
.
Sie können den folgenden Code verwenden, um alle Spaltennamen zu drucken; Sie können auch den Code ändern andere Details drucken in welcher auch immer Format u
declare @Result varchar(max)='
'
select @[email protected]+''+ColumnName+'
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id('tblPracticeTestSections')
) t
order by ColumnId
print @Result
Ausgabe
column1
column2
column3
column4
So verwenden Sie den gleichen Code wie die Tabelle und ihre Spaltennamen wie C# Klasse drucken die Verwendung Code unten:
declare @TableName sysname = '<EnterTableName>'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public static string ' + ColumnName + ' { get { return "'+ColumnName+'"; } }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @Result = @Result + '
}'
print @Result
Ausgang:
public class tblPracticeTestSections
{
public static string column1 { get { return "column1"; } }
public static string column2{ get { return "column2"; } }
public static string column3{ get { return "column3"; } }
public static string column4{ get { return "column4"; } }
}
versuchen diese
select * from <tablename> where 1=2
................................... ...
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
- 1. Geben Sie $ .get Daten in einer Funktion zurück, die jQuery
- 2. Geben Sie die Popupmenüauswahl in MATLAB mit einer Codezeile zurück
- 3. Geben Sie die ersten N Zeichen der Zeichenfolge zurück
- 4. Wie geben Sie nicht kopierbare Typen zurück?
- 5. Wie geben Sie ein Objekt von einer Funktion zurück?
- 6. Wählen Sie Spaltennamen in einer Tabelle mit PyODBC
- 7. Geben Sie eine Bestätigungsmeldung mit Schlüssel zurück und geben Sie
- 8. MySQL verwendet Spaltennamen aus einer anderen Tabelle
- 9. So geben Sie eine bestimmte Zeichenfolge zurück
- 10. Geben Sie die ID des zuletzt eingefügten Werts zurück. SQL
- 11. Wie mache ich PARTITION_BY mehrere Spaltennamen in einer Spalte Tabelle?
- 12. So geben Sie eine Zellreferenz aus einer Formel zurück
- 13. Zuweisen von Spaltennamen aus einer Liste zu einer Tabelle
- 14. So geben Sie XML in einer Zend Framework-Anwendung zurück
- 15. INSERT in die Tabelle ohne Spaltennamen Angabe
- 16. Nur Spaltennamen aus hive Tabelle
- 17. So geben Sie den Mehrfachformularwert von einer einzelnen Seite zurück
- 18. So geben Sie eine schreibgeschützte Kopie einer Sammlung zurück
- 19. pgAdmin zeigt keine Spaltennamen nach einer Kopie einer Tabelle erstellen
- 20. So geben Sie eine Arraylist aus einer Methode zurück
- 21. Einfügen in Tabelle A von Tabelle B, ungültigem Spaltennamen Fehler geben
- 22. Wie erhalten Sie Spaltennamen der Tabelle zur Laufzeit in C#?
- 23. So geben Sie die temporäre Tabelle aus der gespeicherten Prozedur zurück
- 24. Geben Sie 1 zurück, wenn die Nummer in der Tabelle existiert und 0 sonst
- 25. So geben Sie Fehler von PYODBC zurück
- 26. Geben Sie C++ zu Python zurück?
- 27. So geben Sie Daten von einer CherryPy BackgroundTask zurück, die so schnell wie möglich ausgeführt wird
- 28. C# Wie geben Sie das Dataset von sqldatareader zurück?
- 29. geben Sie ein Array von Primzahlen zurück
- 30. Get Spaltennamen und Frequenz aus einer Tabelle, die wie eine Matrix, die eine Daten sieht Rahmen
Was ist der 'YourSchemaName'? – Drewdin
'YourSchemaName' ist das Schema für die Tabelle, die Sie abfragen. Beispiel: dbo.myTable, 'dbo' ist das Schema, zu dem 'myTable' gehört. Schemas erleichtern das Zuweisen von Berechtigungen zu einer Gruppierung anstelle jeder einzelnen Tabelle. Siehe auch diese Frage: http://stackoverflow.com/questions/1062075/why-do-table-names-in-sql-server-start-with-dbo – jmosesman
Vergessen Sie nicht auf USE DatabaseName Befehl sonst können Sie in Master oder suchen andere Datenbank als Sie möchten – Muflix