1

のような順序に基づいてテーブルから列を選択したい

create Table Products
(
  ProductId Int,
  ProductName varchar(50)
)

2 番目の列の名前がわかりません。

どのように私はそれを得ることができます:

Select Col1,Col2 From Product
4

3 に答える 3

3

SQL サーバーの場合:

SELECT句ではこれを行うことはできません。列の順序番号に基づいて選択することはできません。明示的に選択する必要がある列の名前をリストする必要があります。それ以外の場合は、SELECT *すべてをリストするために使用します。データベースからデータを取得するためにデータ リーダー オブジェクトまたはその他の ado.net メソッドを使用している場合、次のようなことができますが、これは SQL ステートメントにリストされている列名リストに基づいています。

ただし、次の回答で説明されているように、列のメタデータordinal_positionを読み取ることにより、このようなことを動的に行うことができます。information_schema.columns

ただし、ORDER BY句でこれを行うことができます。ORDER BY番号を列にすることができます:

SELECT *
FROM TableName
ORDER BY 2; -- for col2

ただし、これを inORDER BYまたは in SELECT(存在する場合) で使用することはお勧めしません。さらに、列の順序はリレーショナル モデルでは重要ではありません。

更新:ストアド プロシージャに渡されたテーブル パラメーターから少なくとも 3 つの列を選択する場合。次のようにしてみてください。

ストアド プロシージャは、 parameter を受け取るはず@tableNameParamです。次のコードは、ストアド プロシージャに渡されたから最初の3 つの列を返す必要があります。@tablenameParam

DECLARE @col1 AS VARCHAR(100);
DECLARE @col2 AS VARCHAR(100);
DECLARE @col3 AS VARCHAR(100);
DECLARE @tableNameParam AS VARCHAR(50) = 'Tablename';

DECLARE @sql AS VARCHAR(MAX) ;

SELECT @col1 = column_name FROM information_schema.columns 
                           WHERE table_name = @tableNameParam
                             AND ordinal_position = 1;

SELECT @col2 = column_name FROM information_schema.columns 
                           WHERE table_name = @tableNameParam;
                             AND ordinal_position = 2;

SELECT @col3 = column_name FROM information_schema.columns 
                           WHERE table_name = @tableNameParam;
                             AND ordinal_position = 3;

SET @sql = 'SELECT ' + col1 + ',' + col2 ' + 'col3 ' + FROM ' + @tablename; 
于 2012-11-13T11:57:09.210 に答える
2

あなたはいつでもできる

select * from Product
于 2012-11-13T11:55:22.523 に答える