1

列名を使用して列のデータ型を取得する必要があります。C#でコーディングしています。状況は、いくつかの日付を varchar に変換するビューがあるため、それらをより適切に表示できます (正確には時間がかかりません)。ただし、これは列のデータ型が正しくないことを意味します。私がしたいのは、列名を使用して DataTable スキーマから列を検索し、その列のデータ型を取得することです。この場合、ビューではなくメイン テーブルから実際のデータ型を収集します。アイデア?

4

4 に答える 4

4

DataTable.Columnsプロパティは、DataColumnCollectionであり、列名でインデックスを付けDataColumnて、プロパティを持つを取得できDataTypeます。

于 2012-06-13T17:02:37.273 に答える
1

information_schema.columnsテーブルは、 sys.columnsテーブルよりも必要なものについてより明確な情報を提供します。次のことを試すことができます。

SELECT data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'tableName' AND column_name = 'columnName'
于 2013-01-15T15:00:52.967 に答える
0

値から型を推測しないと、それがどのように可能かわかりません。ビューからの結果とコード内の列名がある場合、ビューが使用するテーブルに関する情報はその時点で失われます。

もちろん、テーブルの名前がわかっている場合は、そのテーブルに関する情報を取得できます。次のような単純なクエリを使用して実現できます。

SELECT TOP 0 * FROM <<tableName>>

または DMV を使用する場合:

SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('<<tableName>>')

最初のケースでは、IDataReader で GetSchemaTable を使用し、行を反復処理して名前で列を見つけます。2 番目のケースでは、結果セット自体を反復処理して、その方法で列を見つけることができます。

于 2012-06-13T16:59:20.363 に答える
0

SQL Server を使用している場合は、SET FMTONLY を使用できます。メタデータのみをクライアントに返します。実際にクエリを実行せずに、応答の形式をテストするために使用できます。

SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SET FMTONLY ON; select column from table; SET FMTONLY OFF";
SqlDataReader reader = cmd.ExecuteReader();
SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[0]["ProviderType"];  

礼儀: StackOverflow

于 2012-06-13T17:15:36.203 に答える