- PR -

SELECT INTO でソートした値にIDENTITYをふるには

投稿者投稿内容
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-07-06 10:21
まず、ごめんなさい。

マイクロソフトのサポート技術情報の検索で"IDENTITY order"で調べたところ、
SELECT INTO または INSERT で使用されたら、 ID の動作が機能します。 ORDER BY 句を含むクエリを選択します。
てのを見つけました。

どうやら、select into でのソート順通りにIDがふられるってのは保証されないようです。予め、ID列を含む一時テーブルをcreateしといてそのテーブルにinsertすればOKなようです。

-----------------------------------------------------------------
create table ##TESTTABLE (TESTDATA INT)
insert into ##TESTTABLE values(12) --大きい順で
insert into ##TESTTABLE values(11)
insert into ##TESTTABLE values(10)

create table ##SUBTABLE1 (RANK int identity(1,1), TESTDATA int)

insert into ##SUBTABLE1(TESTDATA)
SELECT TOP 3 TESTDATA
FROM ##TESTTABLE
ORDER BY TESTDATA

select * from ##SUBTABLE1;
-----------------------------------------------------------------

ほんと、惑わせてしまってすんませんでした。
うい
会議室デビュー日: 2007/05/29
投稿数: 11
投稿日時: 2007-07-07 09:41
正しい方法まで載せていただいてありがとうございます。

解決することができました。
ありがとうございます。
BabyDaemons
会議室デビュー日: 2008/04/22
投稿数: 4
投稿日時: 2008-05-08 18:35
リリース直前のWebアプリでページの表示順がおかしい不具合の原因を調べてこのスレッドにたどり着きましたが、SQL Server 2000以前では

コード:
SELECT IDENTITY(INT,1,1) AS SEQ, * INTO T1 FROM T2 ORDER BY ...



とかしちゃいけないんですね。(;_;)
教えていただいたKnowledge Baseにこう書いてありますね。

 この資料は以下の製品について記述したものです。
 ・Microsoft SQL Server 7.0 Standard Edition
 ・Microsoft SQL Server 2000 Desktop Engine (Windows)
 ・Microsoft SQL Server 2000 Developer Edition
 ・Microsoft SQL Server 2000 Enterprise Edition
 ・Microsoft SQL Server 2000 Personal Edition
 ・Microsoft SQL Server 2000 Standard Edition

でも他のKnowledeg Baseによく書いてある「この動作は仕様です。」がないのは、
MSもこの現象を不具合だと思っているのかしら?

_________________
"BabyDemons" means "Baby" of Deamons (in Jpanaese, 妖精).
Deamons are Unix Service Prosecess.
http://d.hatena.ne.jp/babydaemons/

スキルアップ/キャリアアップ(JOB@IT)