2016-10-08 4 views
0

これは簡単だと確信していますが、私はたくさんのグーグルで検索して検索しました。SQL Serverの最近の行

私は100000000000000000個のレコードで日付なしのテーブルを持っています。

私は、最新のエントリを見てみたい、すなわち

Select top 200 * 
from table 

しかし、私は、最新のエントリを見てみたいです。テーブルに使用できる行識別子がありますか?

すなわち

select top 200 * 
from table 
order by rowidentifer Desc 

おかげ

+2

いいえテーブルには順序はありません。 – dnoeth

+0

100,000,000,000,000,000行のテーブルを持つことはほとんど不可能です。あなたがそうするならば、話すことができるかなり良いDBAを持っているはずです。 –

+2

完全なBS。たとえ各行が14バイトで小さかったとしても、テーブルの記憶容量は1400ペタバイトになります。 –

答えて

-1

あなたは列が1(すなわち。IDENTITY、またはSEQUENCE、または類似のものとして捧げてきた `tを場合いや、要するに、どれも、ありません)。あなたがした場合、あなたは順序付けられた結果を戻すことができます。

0

はすでにコメントの中で述べられてrow.identifer DESCによってテーブルの順序から私はすなわち、トップ200 *を設定し、テーブルに使用することができrow.identifier

として、ありませんがあります。最も良い方法は、アイデンティティ、タイムスタンプ、またはレコードを識別する他の形式を持つことです。ここでは、EXCEPTを使用して必要なものを得る別の方法がありますが、実行計画が最良ではありません。それを再生し、必要に応じて変更してください。別のノートで

 --testing purposes... 
DECLARE @tbl TABLE(FirstName VARCHAR(50)) 
DECLARE @count INT = 0 

WHILE (@count <= 12000) 
BEGIN 
    INSERT INTO @tbl(FirstName) 
    SELECT 
     'RuPaul ' + CAST(@count AS VARCHAR(5)) 

    SET @count += 1 

END 

--adjust how many records you would like, example is 200 
SELECT * 
FROM @tbl 
EXCEPT(SELECT TOP (SELECT COUNT(*) - 200 FROM @tbl) * FROM @tbl) 

--faster than above 
DECLARE @tblCount AS INT = (SELECT COUNT(*) FROM @tbl) - 200 
SELECT * 
FROM @tbl 
EXCEPT(SELECT TOP (@tblCount) * FROM @tbl) 

、あなたはIDや他の列を持つ別の Table Variableを作成することができ、その後、あなたが必要となるレコードを挿入することができます。そして、あなたは

ALTER TABLE TABLENAME 
ADD ID INT IDENTITY 

を何ができるか。これは、テーブル「ID」に別の列を追加して、自動的に得られます...

などの例OrderByのために、テーブルに対して他の操作を行うことができますそれはIDです。次に、使用できる識別子があります。

0

これは実際の質問に対する回答ではありません。 %%physloc%%を使用できるかどうかは疑問です。

しかし、
実際には、作成日時フィールド、またはそのための連続したフィールドが必要です。

これはテストです:

create table Test (id int identity(1,1) primary key, var1 varchar(20), creation_date datetime default SYSDATETIME()); 

declare @T table (c char(1)); 

insert into @T (c) values 
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'); 

insert into Test (var1) select concat(t1.c,t2.c,t3.c) as text from @T t1, @T t2, @T t3 order by 1; 

select top 10 *, %%physloc%% as physloc from Test order by %%physloc%% desc; 

select top 10 * from Test order by id desc; 

2つの選択は異なるレコードを返し、そう%%physloc%%はそれのために使用することはできません。

関連する問題