14

SQLServer に MyTable という名前のテーブルがあるとしましょう

ID FirstName   LastName
1  Harry       Dan
2  Maria       Vicente
3  Joe         Martin

テーブルにデータを挿入する必要がある場合は、次のように Insert Query を起動するだけです

INSERT INTO MyTable (ID, FirstName, LastName) VALUES (4, Smith, Dan);

しかし、事前に列名がわからない場合は、テーブル名しかわかりません。次に、実行時にテーブルの列名を取得する方法はありますか?

4

6 に答える 6

15

あなたはSQLを使用することができます-

SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('TABLE_NAME') 
于 2013-04-23T11:40:08.573 に答える
5

純粋な C# / .NET コードを使用する別のオプション: まず、列名の単純なリストを返すヘルパー メソッド。DataTable を使用してテーブル スキーマ情報を保持するということは、各列 fx について他の情報も取得できることを意味します。AutoIncrement カラムなどの場合

    private IEnumerable<string> GetColumnNames(string conStr, string tableName)
    {
        var result = new List<string>();
        using (var sqlCon = new SqlConnection(conStr))
        {
            sqlCon.Open();
            var sqlCmd = sqlCon.CreateCommand();
            sqlCmd.CommandText = "select * from " + tableName + " where 1=0";  // No data wanted, only schema
            sqlCmd.CommandType = CommandType.Text;

            var sqlDR = sqlCmd.ExecuteReader();
            var dataTable = sqlDR.GetSchemaTable();

            foreach (DataRow row in dataTable.Rows) result.Add(row.Field<string>("ColumnName"));
        }

        return result;
    }

メソッドは次のように呼び出すことができます。

        var sortedNames = GetColumnNames("Data Source=localhost;Initial Catalog=OF2E;Integrated Security=SSPI", "Articles").OrderBy(x => x);
        foreach (var columnName in sortedNames) Console.WriteLine(columnName);
于 2014-10-07T15:15:23.783 に答える
1

単にこのクエリで:

SELECT * FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.[table_name]')

またはこのクエリ:

SELECT COLUMN_NAME
FROM information_schema.columns
WHERE TABLE_NAME = [table_name]
ORDER BY COLUMN_NAME
于 2013-04-23T11:44:24.170 に答える