-1

私が読んだことはすべて、これは起こるべきではないと言っていますが、実際に起こります。私のデータベースのサイズはおよそ 15 GB で、数百のテーブルがあり、テーブルには数行から数百万行まであります。

ordersという名前のテーブルがあり、最初の列が呼び出さIDれ、テーブルの主キーであるとしましょう。他にも多くの列があり、そのうちの 1 つに という名前が付いていpolicyます。次のクエリを実行すると:

SELECT * 
FROM orders 
WHERE policy = 12345 
ORDER BY ID

結果は次のようになると思います。

1
2
3
4
5
6

ただし、結果が次のようになる場合もあります。

1
2
4
5
3
6

あたかも3別の場所に移動したかのようです。どのように/なぜこれが起こるのでしょうか?

実際のクエリは

SELECT * FROM loc_info WHERE PolInfo_ID=25634 ORDER BY LocInfo_ID

テーブル定義は

CREATE TABLE [dbo].[loc_info]( 
    [LocInfo_ID] [int] IDENTITY(1,1) NOT NULL, 
    [PolInfo_ID] [int] NOT NULL, 
    [name] [varchar](100) NOT NULL, 
    [address1] [varchar](100) NULL, 
    [address2] [varchar](100) NULL, 
    [city] [varchar](100) NULL, 
    [state] [varchar](100) NOT NULL, 
    [zip] [char](10) NULL, 
    [county] [varchar](100) NULL, 
    [country] [varchar](100) NULL, 
    [loc_number] [varchar](20) NULL, 
    [occ_type_id] [int] NULL, 
    [occ_type] [varchar](100) NULL, 
    [flood_zone] [varchar](6) NOT NULL, 
    [coastal_zone] [varchar](20) NOT NULL, 
    [earthquake_zone] [varchar](20) NOT NULL, 
    [earthquake_group] [varchar](20) NULL, 
    [BuildingTIV] [numeric](18, 0) NULL, 
    [MachEquipTIV] [numeric](18, 0) NULL, 
    [StocksSuppliesTIV] [numeric](18, 0) NULL, 
    [OtherTIV] [numeric](18, 0) NULL, 
    [BusinessInterruptTIV] [numeric](18, 0) NULL, 
    [ExtraExpTIV] [numeric](18, 0) NULL, 
    [RentTIV] [numeric](18, 0) NULL, 
    [Property] [numeric](18, 0) NULL, 
    [IsUpload] [bit] NULL, 
    [IsMoved] [bit] NULL, 
 CONSTRAINT [PK_locations] PRIMARY KEY CLUSTERED  
( 
    [LocInfo_ID] ASC
)WITH (PAD_INDEX  = OFF
, STATISTICS_NORECOMPUTE  = OFF
, IGNORE_DUP_KEY = OFF
, ALLOW_ROW_LOCKS  = ON
, ALLOW_PAGE_LOCKS  = ON
, FILLFACTOR = 90) ON [PRIMARY] 
) 
4

2 に答える 2

9

LocInfo_ID注文している列が実際には であり、実際には であり、問​​題が発生したときに句が実際に配置されていると仮定すると、これは可能ではINTありません。ORDER BY

これら 3 つの条件が真である有効な再現を生成できる場合、バグが発生する可能性があります (破損が原因である可能性があります)。

ここには、私たちが知らない他の変数があるのではないかと思います。私の推測では、あなたが調べている列はあなたが注文しているものではないか、あなたが思っているデータ型ではないか、またはこのランダムな順序付けされていない結果を観察するとき、実際には使用済み。

ORDER BYこれはあなたが望むすべてに反対票を投じますが、これはかなり科学的で論理的です.SQL Serverは、(a)定義していないか、(b)定義していない場合を除いて、定義した an を台無しにしませんあなたが期待する順序を生成する方法。これが非常に単純なテーブルであり、非常に単純な順序であり、断続的にしか発生しないことを断固として断言していることを考えると、私は JNK に同意し、SQL Server のバグを発見した可能性は非常に小さいと言わざるを得ません。確かに。

于 2013-04-12T18:54:57.350 に答える