16

を実行すると、SQL Server は列の順序をどのように決定しますSELECT *か?

データの順序付けには「Order By」が不可欠であることは知っていますが、列名が一貫していることを期待していました。

注: 私のコードは、列が返される実際の順序に依存していません。SQL Server が列名の順序を決定する方法を知りたいだけです。

私のチームが使用している約 20 台のコンピューターのうち、1 台は動作が異なります。違いは調査する価値があります。SQL Server Management Studio を開くと、すべてのコンピューターで列名の順序が同じように見えます。私たちのアプリケーションがクエリを作成するとき、私はその違いを見ることができます。

SQL Server 2008 と SQL Server 2008 R2 を使用しています。私のアプリケーションは C# System.Data.SqlClient を使用してデータベースにアクセスします。

編集: 私の問題は、コンピューターの 1 つが、意図したユーザーではなく、「sa」としてログインするように構成されていることであることが判明しました。ビューにヒットするつもりだったときに、クエリがテーブルに直接ヒットしていました。sys.columns について学習していただきありがとうございます

4

2 に答える 2

17

column_idシステムから見た順に並べていますsys.columns

次の方法で確認できます。

SELECT column_id, name
FROM sys.columns
WHERE object_id = Object_id('MyTableName')
ORDER BY column_id

編集

これは民主党向けです。より大きなテーブルでテストする必要がありますが、インデックスではなく、テーブルで定義された順序を使用しているようです:

CREATE TABLE #T (cola int, colb int, colc int)

INSERT INTO #T
VALUES
(1,2,3),
(2,3,4),
(4,5,6)

SELECT * FROM #T

CREATE INDEX ix_test ON #T (colb, colc, cola)

SELECT * FROM #t
WHERE colb > 0

DROP TABLE #T
于 2012-04-18T16:53:23.927 に答える
4

これらは、Sql Server Management Studio に表示される順序と同じです。基本的に、それらが作成された順序です。

必要な列の順序を確保するための「正しい」解決策は、SELECT ステートメントでフィールドを明示的に指定することです。 SELECT *出力列の順序は保証されません。

于 2012-04-18T16:51:54.533 に答える