回答:
2008バージョンでもっと簡単な方法があるかどうかはわかりません。
USE [Database Name]
SELECT COLUMN_NAME,*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName' AND TABLE_SCHEMA='YourSchemaName'
これが最も簡単な方法です
exec sp_columns [tablename]
このようなもの?
sp_columns @table_name=your table name
1つの方法は、syscolumnsをクエリすることです。
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
Objtype
のに:)、列冗長を
これは、OBJECT_ID()関数を使用してテーブルのIDを見つけるため、上記の提案よりも少し簡単に見えます。そのIDの列はすべてテーブルの一部です。
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
私は通常、同様のクエリを使用して、新しいバージョンの一部であることがわかっている列が存在するかどうかを確認します。これは、WHERE句に{AND name = 'YOUR_COLUMN'}を追加した同じクエリです。
IF EXISTS (
SELECT *
FROM syscolumns
WHERE id=OBJECT_ID('YOUR_TABLE')
AND name='YOUR_COLUMN'
)
BEGIN
PRINT 'Column found'
END
これを試して
select * from <tablename> where 1=2
...............................................
WHERE 1=2
返し、列メタデータも返すという論理です。ODBCなどのプログラムインターフェイスを使用している場合、この列情報はプログラム内のカーソルオブジェクトからリスト/配列としてアクセスできます。これは私が探していたものです。純粋なSQLコンテキストでは意味がないかもしれませんが、Python / Java / C / etcを介してデータベースに接続する場合は簡潔なアプローチです。
なぜこれを試さないのですか?
テーブルを右クリック->スクリプトテーブルの名前->作成先->新しいクエリエディターウィンドウ?
列のリスト全体がスクリプトで指定されています。それをコピーして、必要に応じてフィールドを使用します。
"I want to return these as data"
を示していますが、答えは値を取得しますが、OPは実行時にデータを必要とする可能性があります。
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の値がsp_columnsの一部として返される 'ORDINAL_POSITION'の値と同じかどうかはわかりませんが、以下ではそのように使用しています。
これが私が見つけた他のいくつかの回答のわずかなバリエーションです-テーブル内の列の「位置」または順序が私のアプリケーションで重要であるため、これを使用します-私は基本的に「列(n)が何と呼ばれるかを知る必要があります? '
sp_columnsは無関係な要素をすべて返します。T-SQL関数よりもselectを使用する方が便利なので、次のようにしました。
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の答えはすばらしいですが、データベース名をクエリに含める方がおそらく簡単です。これは、次のSQLで実現できます。
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'you-table-name' AND TABLE_CATALOG='your-database-name'
以下のコードを使用して、すべての列名を出力できます。コードを変更して、好きな形式で他の詳細を印刷することもできます
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
出力
column1
column2
column3
column4
C#クラスと同じコードを使用してテーブルとその列名を出力するには、次のコードを使用します。
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
出力:
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"; } }
}
私は、マーティン・スミスが述べたようなクエリを使用していますが、少し短いだけです。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTableName'
以来SYSCOLUMNS廃止されて、使用することを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
user_type_id = ID
タイプの利回り になります。これはデータベース内で一意です。システム・データ・タイプの場合:user_type_id = system_type_id
。