Yanıtlar:
2008 sürümünde daha kolay bir yol olup olmadığından emin değilim.
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
Bu en kolay yol
exec sp_columns [tablename]
Böyle bir şey mi?
sp_columns @table_name=your table name
Bir yöntem syscolumns sorgulamaktır:
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
ObjtypeYine de sütun gereksiz buluyorum :)
Tablonun kimliğini bulmak için OBJECT_ID () işlevini kullandığından yukarıdaki önerilerden biraz daha kolay görünüyor . Bu kimliğe sahip herhangi bir sütun tablonun bir parçasıdır.
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
Genellikle benzer bir sorgu, yeni bir sürümünün bir parçası olduğunu bildiğim bir sütun olup olmadığını görmek için kullanın. Bu, nereye yan tümcesine {AND name = 'YOUR_COLUMN'} eklenmesiyle aynı sorgudur.
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
bunu dene
select * from <tablename> where 1=2
...............................................
WHERE 1=2ve yine de sütun meta verilerini döndürecektir. ODBC gibi programlı bir arabirim kullanıyorsanız, bu sütun bilgisine, programın içindeki imleç nesnesinden bir liste / dizi olarak erişilebilir, aradığım şey budur. Saf bir SQL bağlamında mantıklı gelmeyebilir, ancak bir veritabanına Python / Java / C / etc aracılığıyla bağlanırken kısa ve özlü bir yaklaşımdır.
Aşağıdaki yukarıdaki ilk önerilen sorgu gibi görünüyor, ancak bazen veritabanını çalışması için belirtmeniz gerekir. Sorgunun TABLE_SCHEMA belirtilmeden de çalışması gerektiğini unutmayın:
SELECT COLUMN_NAME
FROM YOUR_DB_NAME.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND TABLE_SCHEMA = 'YOUR_DB_NAME'
Neden sadece denemiyorsunuz:
tabloya sağ tıklayın -> Komut Dosyası Tablosu -> Oluştur -> Yeni Sorgu Düzenleyici Penceresi?
Tüm sütun listesi kodda verilir. Kopyalayın ve alanları gerektiği gibi kullanın.
"I want to return these as data", cevabınız değerleri alacak olsa da, OP'nin büyük olasılıkla çalışma zamanında veri istemesi muhtemeldir.
USE[Database]
SELECT TABLE_NAME,TABLE_SCHEMA,[Column_Name],[Data_type]
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='dbo'
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 =@TableName
order by ORDINAL_POSITION
END
END
Syscolumns.colid değerinin sp_columns'ın bir parçası olarak döndürülen 'ORDINAL_POSITION' değeri ile aynı olup olmadığından emin değilim, ancak aşağıdaki şekilde kullanıyorum - umarım yanlış bilgi vermiyorum ...
İşte bulduğum bazı diğer cevaplar üzerinde küçük bir varyasyon - Bunu kullanıyorum çünkü tablodaki sütunun 'konumu' veya sırası önemlidir - Temel olarak şunu bilmeliyim 'Sütun (n) nedir? ?'
sp_columns bir sürü yabancı şey döndürür ve ben T-SQL işlevlerinden daha fazla bir seçim ile işleyiciyim, bu yüzden bu yolu gittim:
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
@Gulzar Nazim'in cevabı harika olsa da , sorguya veritabanı adını eklemek daha kolay olabilir, bu da aşağıdaki SQL ile elde edilebilir.
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
Tüm sütun adlarını yazdırmak için aşağıdaki kodu kullanabilirsiniz; İstediğiniz formatta diğer ayrıntıları yazdırmak için kodu da değiştirebilirsiniz.
declare @Result varchar(max)='
'
select @Result=@Result+''+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
Çıktı
column1
column2
column3
column4
Tablo ve sütun adını C # sınıfı olarak yazdırmak için aynı kodu kullanmak için aşağıdaki kodu kullanın:
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
Çıktı:
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"; } }
}
Sadece Martin Smith gibi bir sorgu kullanın, sadece biraz daha kısa:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'TableName'
Yana syscolumns kullanımdan kaldırılmıştır , kullanmak 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.Typesverecek user_type_id = IDÇeşidi. Bu veritabanı içinde benzersizdir. Sistem veri türleri için: user_type_id = system_type_id.
DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE Table_name = 'MxLocations';
SELECT @col;
Postgresql ile çalışıyorsanız, bu durumda birden fazla şemanın aynı ada sahip bir tabloya sahip olma olasılığı aşağıdaki sorguyu uygulayın
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table_name' AND table_schema = 'your_schema_name’;