Çağrı SQL Server 2005 Sonuçları

oy
36

Nasıl SQL Server 2005'te ben sayfa sonuçları?

Ben SQL Server 2000'de denedim ama bunu yapmak için güvenilir bir yol yoktu. SQL Server 2005 herhangi bir yöntemle inşa eğer ben şimdi merak ediyorum?

Ben adlarıyla kullanıcıları listelerseniz ne çağrı derken, örneğin, ben sadece ilk 10 kayıtları, vb sonraki 10 kayıtları ve geri dönmek isterler edilir.

Herhangi bir yardım çok takdir edilecektir.

Oluştur 05/08/2008 saat 21:57
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
33

Sen kullanabilirsiniz the Row_Number()işlevi. Şöyle Onun kullandı:

SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users

Buradan da bir seti bir sonucu verecektir RowIDsize arasına sayfaya kullanabilirsiniz alanında.

SELECT * 
FROM 
    ( SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
      FROM Users 
    ) As RowResults
WHERE RowID Between 5 AND 10

vb

Cevap 05/08/2008 saat 21:59
kaynak kullanıcı

oy
13

Bir deyimi (toplam artı çağrı) içinde ölmek çalışıyorsanız. Sen (ANSI SQL açısından pencere fonksiyonları) bendi ile bölümü için SQL Server desteği keşfetmek gerekebilir. Oracle sözdizimi sadece row_number () kullanılarak yukarıdaki örnekte olduğu gibi, ama aynı zamanda sayfalama döndürülen her satır ile birlikte toplam satır sayısını elde etmek için madde ile bir bölüm olarak eklenmiştir (toplam satır 1.262 olan):

SELECT rn, total_rows, x.OWNER, x.object_name, x.object_type
FROM (SELECT COUNT (*) OVER (PARTITION BY owner) AS TOTAL_ROWS,
         ROW_NUMBER () OVER (ORDER BY 1) AS rn, uo.*
         FROM all_objects uo
         WHERE owner = 'CSEIS') x
WHERE rn BETWEEN 6 AND 10

Sahibi = 'CSEIS' ve benim bölüm sahibi üzerinde nerede olduğunu unutmayın. Yani sonuç şunlardır:

RN  TOTAL_ROWS  OWNER   OBJECT_NAME            OBJECT_TYPE
6   1262    CSEIS   CG$BDS_MODIFICATION_TYPES   TRIGGER
7   1262    CSEIS   CG$AUS_MODIFICATION_TYPES   TRIGGER
8   1262    CSEIS   CG$BDR_MODIFICATION_TYPES   TRIGGER
9   1262    CSEIS   CG$ADS_MODIFICATION_TYPES   TRIGGER
10  1262    CSEIS   CG$BIS_LANGUAGES            TRIGGER
Cevap 14/08/2008 saat 18:15
kaynak kullanıcı

oy
5

Bu kabul cevabı aslında ben onu işe almak için bir kez daha çemberin içinden atlamak zorunda ... benim için çalışmaz.

Cevabı çalıştığımızda

SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9

buna rowID olduğunu bilmiyordum şikayetçi, başarısız oldu.

Böyle seçmek bir iç sarın zorunda:

SELECT * 
FROM
    (SELECT
    Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
    FROM Users
    ) innerSelect
WHERE RowID Between 0 AND 9

ve sonra işe yaradı.

Cevap 15/04/2009 saat 18:56
kaynak kullanıcı

oy
2

Ben sayfalama yapmak gerektiğinde, ben genellikle de geçici bir tablo kullanmak. Sen kayıtların toplam sayısını döndürmek için bir çıkış parametresini kullanabilirsiniz. seçme durum ifadeleri dinamik SQL başvurmak gerek kalmadan belirli sütunlar üzerinde verileri sıralamak için izin verir.

--Declaration--

--Variables
@StartIndex INT,
@PageSize INT,
@SortColumn VARCHAR(50),
@SortDirection CHAR(3),
@Results INT OUTPUT

--Statements--
SELECT @Results = COUNT(ID) FROM Customers
WHERE FirstName LIKE '%a%'

SET @StartIndex = @StartIndex - 1 --Either do this here or in code, but be consistent
CREATE TABLE #Page(ROW INT IDENTITY(1,1) NOT NULL, id INT, sorting_1 SQL_VARIANT, sorting_2 SQL_VARIANT)
INSERT IGNORE  INTO #Page(ID, sorting_1, sorting_2)
SELECT TOP (@StartIndex + @PageSize)
    ID,
    CASE
        WHEN @SortColumn='FirstName' AND @SortDirection='ASC' THEN CAST(FirstName AS SQL_VARIANT)
        WHEN @SortColumn='LastName' AND @SortDirection='ASC' THEN CAST(LastName AS SQL_VARIANT)
        ELSE NULL
    END AS sort_1,
    CASE
        WHEN @SortColumn='FirstName' AND @SortDirection='DES' THEN CAST(FirstName AS SQL_VARIANT)
        WHEN @SortColumn='LastName' AND @SortDirection='DES' THEN CAST(LastName AS SQL_VARIANT)
        ELSE NULL
    END AS sort_2
FROM (
    SELECT
        CustomerId AS ID,
        FirstName,
        LastName
    FROM Customers
    WHERE
        FirstName LIKE '%a%'
) C
ORDER BY sort_1 ASC, sort_2 DESC, ID ASC;

SELECT
    ID,
    Customers.FirstName,
    Customers.LastName
FROM #Page
INNER JOIN Customers ON
    ID = Customers.CustomerId
WHERE ROW > @StartIndex AND ROW <= (@StartIndex + @PageSize)
ORDER BY ROW ASC

DROP TABLE #Page
Cevap 16/09/2008 saat 17:17
kaynak kullanıcı

oy
0

İşte sayfalama için bunu yapar: Geçici bir tabloya ekler olarak kodlanmıştır sayfalık gereken benim büyük tüm sorgular. geçici tablo yukarıda belirtilen ROW_NUMBER () 'ya benzer bir şekilde hareket edecek bir kimlik alanı vardır. çağıran kodun birçok toplam kayıtlar vardır bilir bu yüzden bir çıkış parametresinde geçici tablodaki satır sayısını depolar. çağıran kodu da istediği hangi sayfa belirtir ve geçici tablodan dışarı seçilir sayfa başına kaç satır,.

Bu şekilde yapıyor hakkında serin şey de rapor başvurumun her ızgarasının üzerinde CSV olarak iade gelen tüm satırları almak için izin veren bir "İhracat" bağlantısını olması. Bu bağlantı aynı saklı yordamı kullanır: Sadece çağrı mantığı yapmak yerine geçici tablonun içeriğini döndürür. Bu sayfalama nefret ve görmek istediğiniz kullanıcıları placates şeyi , ve bir milyon farklı şekillerde sıralamak istiyorum.

Cevap 13/08/2008 saat 15:16
kaynak kullanıcı

oy
0

Sana unfortionately bunu başarmak için ayrı bir sorgu gerçekleştirmek gerekiyordu inanıyoruz.

: Ben bu sayfadan biraz yardım kullanarak önceki pozisyonda Bunu gerçekleştirmek başardı DotNet 2.0 Çağrı

Onlar da bunun bir satır ayrı saymak çekerek vardır.

Cevap 05/08/2008 saat 22:05
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more