のような順序に基づいてテーブルから列を選択したい
create Table Products
(
ProductId Int,
ProductName varchar(50)
)
2 番目の列の名前がわかりません。
どのように私はそれを得ることができます:
Select Col1,Col2 From Product
のような順序に基づいてテーブルから列を選択したい
create Table Products
(
ProductId Int,
ProductName varchar(50)
)
2 番目の列の名前がわかりません。
どのように私はそれを得ることができます:
Select Col1,Col2 From Product
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;
あなたはいつでもできる
select * from Product