sqlsrv_num_rows Ne Retournant Aucune Valeur
Je suis en train d'essayer d'obtenir le nombre de lignes renvoyées dans une requête. La boucle while boucle à travers les résultats de travaux, mais pour une raison quelconque, le sqlsrv_num_rows ne retourne aucune valeur:
$result = "SELECT * from dtable WHERE id2 = 'apple'";
$query = sqlsrv_query($conn, $result);
$row_count = sqlsrv_num_rows($query);
echo $row_count;
while($row = sqlsrv_fetch_array($query))
{
echo 'yes';
}
Grâce.
Pourquoi ne pas créer un tableau des résultats et de l'utilisation
count()
pour calculer les lignes retournées. Juste une pensée.
OriginalL'auteur user1067577 | 2014-05-19
Vous devez vous connecter pour publier un commentaire.
C'est parce que
sqlsrv_query()
utiliseSQLSRV_CURSOR_FORWARD
type de curseur par défaut. Toutefois, afin d'obtenir un résultat desqlsrv_num_rows()
, vous devez choisir l'un de ces types de curseur ci-dessous:Pour plus d'informations, consultez: Types de curseur (SQLSRV Pilote)
En conclusion, si vous utilisez votre requête comme:
vous recevez le résultat dans:
OriginalL'auteur alalp
Je suis d'accord avec Jack. Je count(*) est un moyen rapide d'obtenir un nombre de lignes, cependant, vous pourriez avoir à faire une analyse d'index cluster. Pour de petits ensembles de données, ce n'est pas un problème.
D'autre part, vous pouvez utiliser les vues du catalogue système. Toutefois, ceux-ci sont mis à jour par certains thread d'arrière-plan. Pour plusieurs téraoctets ensembles de données, un catalogue de recherche pourrait être plus rapide.
En fonction des événements du système, le nombre peut ou peut ne pas être exacte.
http://sqlblog.com/blogs/kalen_delaney/archive/2009/12/07/how-many-rows.aspx
Tout dépend de la précision que vous devez être. Si c'est le livre de données, puis de très précis. Si c'est des données de prévision, peut-être moins précis.
Je suggère l'utilisation de RCSI au lieu de la valeur par défaut de LIRE ENGAGÉS pour obtenir un meilleur point dans le temps. C'est à l'aide de la SELECT COUNT(*) FROM [TABLE] syntaxe.
http://www.sqlpass.org/summit/2013/Sessions/SessionDetails.aspx?sid=4730
Randy Chevalier avait une bonne présentation sur cette dernière année.
Vous pouvez aussi regarder mes isolement de la présentation qui a un code qui montre que LIRE COMMIS peuvent être inexactes.
http://craftydba.com/?page_id=880
Énumérés ci-dessous sont trois solutions.
Bonne chance
J
/*
SQL Server d'analyser et de compilation:
Le temps CPU = 0 ms, le temps écoulé = 0 ms.
(1 ligne(s) affectée)
Table "Adresse". Analyse nombre 1, lectures logiques 36, lectures physiques 1, lectures anticipées 34, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
D'Exécution de SQL Server Fois:
Le temps CPU = 15 ms, temps écoulé = 26 ms.
*/
/*
SQL Server d'analyser et de compilation:
Le temps CPU = 15 ms, temps écoulé = 132 ms.
(1 ligne(s) affectée)
La Table 'sysidxstats'. Analyse nombre 1, lectures logiques 2, lectures physiques 2, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
La Table 'sysschobjs'. Analyse nombre 1, lectures logiques de 6, physique des lectures 3, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
D'Exécution de SQL Server Fois:
Le temps CPU = 0 ms, le temps écoulé = 36 ms.
*/
/*
SQL Server d'analyser et de compilation:
Le temps CPU = 16 ms, temps écoulé = 104 ms.
(1 ligne(s) affectée)
La Table 'Table De Travail'. Nombre de Scan 0, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
La Table 'sysidxstats'. Analyse nombre 1, lectures logiques 10, lectures physiques 2, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
La Table 'sysschobjs'. Nombre de Scan 0, lectures logiques 4, lectures physiques 2, lectures anticipées 0, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
La Table 'sysrowsets'. Analyse nombre 1, lectures logiques de 6, physique des lectures 1, lectures anticipées 24, lectures logiques lob 0, lectures physiques lob 0, lectures anticipées lob 0.
D'Exécution de SQL Server Fois:
Le temps CPU = 0 ms, le temps écoulé = 34 ms.
*/
OriginalL'auteur CRAFTY DBA