webForumDet fria alternativet

@numrows i Sql Server

Databaser & SQL

11 svar · 499 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tjena
Jag vill i samband med en sökfunktion på en sajt kunna visa antalet träffar ovanför sökresultaten.
Nu undrar jag om det finns någon funktion i SQL-Server / ASP likt mysql_num_rows resp. mssql_num_rows som finns i PHP.

Jag har Googlat lite och hittat något som heter @numrows, men har ingen aning om hur det fungerar eller hur jag ska använda.

Jag har testat lite, bla. SELECT @numrows AS antal, * FROM x ... men då får jag ett felmess som säger att jag måste deklarera variabeln @numrows.

Så, hur funkar det egentligen?

Tack!

Medlem sedan dec. 200012 464 inlägg
#2

@@rowcount eller @@rowcount_big

Du får returnera den separat.

Medlem sedan feb. 20034 441 inlägg
#3

Okej, vad är skillnaden mellan dessa två?
Kan jag köra conn.execute("SELECT @@rowcount") direkt efter min ordinarie Execute()?
Funkar det på liknande sätt som @@IDENTITY, så att man inte behöva ange någon tabell?

Medlem sedan feb. 20034 441 inlägg
#4

Aha...

http://msdn2.microsoft.com/en-us/library/ms187316.aspx skrev:

@@ROWCOUNT (Transact-SQL)
Returns the number of rows affected by the last statement. If the number of rows is more than 2 billion, use ROWCOUNT_BIG.

Låter bra det där, tack!

Medlem sedan feb. 20034 441 inlägg
#5

Hm, det fungerar inte riktigt som jag trodde, såhär har jag gjort:

Set rs = conn.Execute (sql)
Set hits = conn.Execute("SELECT @@ROWCOUNT")
search_hits = hits(0)
hits.close : Set hits = Nothing

Den översta raden exekverar själva frågan och direkt under försöker jag få ut antal rader.

Men search_hits blir alltid 0 (noll).

Vad har jag gjort för fel?

Medlem sedan juni 200032 967 inlägg
#6

Om det är en select-fråga du kör så påverkar den inga poster i tabellen, så det är rätt att du får 0.

Medlem sedan feb. 20034 441 inlägg
#7

Okej, men det jag vill är att på ett enkelt sätt räkna antalet träffar i en sökfunktion (som använder SELECT).
Frågan som ska köras är olika beroende på vad man vill söka fram, så jag är ute efter ett enkelt sätt att visa antalet träffar ovanför resulten, därför kan jag inte med. tex hjälp av i räkna hur många varv loopen körs.

Fler förslag`?

Medlem sedan juni 200032 967 inlägg
#8

Använd recordsetobjektets recordcount (kräver att du öppnar recordsetet med en dynamisk cursor).

Medlem sedan feb. 20034 441 inlägg
#9

Okej, du har inte lust att visa lite kod?

Medlem sedan juni 200032 967 inlägg
#10

Hmm, grymt konstigt att du inte fann något när du sökte på recordcount i asp-forumet... Jag fick iaf drygt en miljard träffar där och på google.

set oRS = Server.CreateObject("ADODB.Recordset")
oRS.Open SQL, Conn, 3,1

lCount = oRS.RecordCount
Medlem sedan feb. 20034 441 inlägg
#11

@nders skrev:

Hmm, grymt konstigt att du inte fann något när du sökte...

Inte så konstigt, eftersom jag inte sökte där...

Medlem sedan juni 200032 967 inlägg
#12

Aha!

261 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)