Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2011, 16h27   #1
Membre chevronné
 
Inscription : novembre 2007
Messages : 1 154
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : novembre 2007
Messages : 1 154
Points : 659
Points : 659
Envoyer un message via ICQ à Papy214
Par défaut Utilisation de OUTPUT

Bonjour

Je l'ai déjà fais mais j'ai un trou de mémoire.

Dans une procédure, je fais un DELETE paramétré sur une table.
Je cherche à obtenir le nombre d'éléments supprimés par le DELETE.
Je n'arrive pas à retrouver la bonne syntaxe du OUTPUT.
J'ai fais un bout de code de test:

Code :
1
2
3
4
5
6
7
8
9
10
11
 
ALTER PROCEDURE [dbo].[toto]
  @total int = NULL output
AS
BEGIN
  DELETE FROM test
  OUTPUT DELETED.*
 
  SELECT @total = COUNT(*) FROM DELETED
 
END
Mais le SELECT final ne fonctionne pas.

Quelqu'un pour me rafraichir la mémoire svp ?

Papy
Papy214 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h38   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER PROCEDURE [dbo].[toto]
  @total int = NULL output
AS
BEGIN
  DECLARE @T TABLE 
  (
    ...
  );
 
  DELETE FROM test
  OUTPUT DELETED.* INTO @T
 
  SELECT @total = COUNT(*) FROM @T
 
END
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 20h32   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Citation:
Envoyé par Papy214 Voir le message
Bonjour

Je l'ai déjà fais mais j'ai un trou de mémoire.

Dans une procédure, je fais un DELETE paramétré sur une table.
Je cherche à obtenir le nombre d'éléments supprimés par le DELETE.
Je n'arrive pas à retrouver la bonne syntaxe du OUTPUT.
J'ai fais un bout de code de test:
Inutile d'utiliser OUPUT qui est lourd pour cela (il créée des tables temporaires...)
Il suffit d'interroger @@ROWCOUNT, par exemple comme ceci :
Code :
SELECT @@ROWCOUNT AS NOMBRE_LIGNE_IMPACTEES
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 20h51   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 724
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 724
Points : 6 848
Points : 6 848
Citation:
Envoyé par SQLpro Voir le message
Inutile d'utiliser OUPUT qui est lourd pour cela (il créée des tables temporaires...)
Il suffit d'interroger @@ROWCOUNT, par exemple comme ceci :
Code :
SELECT @@ROWCOUNT AS NOMBRE_LIGNE_IMPACTEES
A +
En effet, j'espère que la procédure ne fait pas que compter que les lignes supprimés sinon le coût de la variable de table ne vaut pas le coup ici

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 22h43   #5
Membre chevronné
 
Inscription : novembre 2007
Messages : 1 154
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : novembre 2007
Messages : 1 154
Points : 659
Points : 659
Envoyer un message via ICQ à Papy214
Je me souvenais vaguement de OUTPUT mais je ne connaissais pas @@ROWCOUNT

Génial ce truc là !

Un grand merci à vous deux !
Papy214 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h39.


 
 
 
 
Partenaires

Hébergement Web