begin process at 2012 05 27 05:09:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Procédures Stockées

 > 

Retourner un parametre


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Retourner un parametre

lundi 20 juillet 2009 à 16:42:38 | Retourner un parametre

scottmat

Membre Club

bonjour à tous,
j'ai une table avec 2 champs Param1 de type nvarchar et Param2 de type datetime
je souhaiterai récupérer le dernier enregistrement de la table en filtrant l'élément Param1.
j'espère que vous m'avez compris :)

voici le code en vb déjà, qui fait appel à la fonction :

Using cn As New Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings.Item(0).ConnectionString)

Dim cmd As New Data.SqlClient.SqlCommand("Maprocedure1", cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@Param1", SqlDbType.NVarChar).Value = Profile.UserName
cmd.Parameters.Add("@Param2", SqlDbType.DateTime).Direction = ParameterDirection.Output

cn.Open()

Dim ret As Integer = ExecuteNonQuery(cmd)
Return CDate(cmd.Parameters("@Param2").Value)
End Using

Puis mon code SQL :

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Maprocedure1]
(
@Param1 nvarchar(256),
@Param2 datetime OUTPUT
)
AS
SET NOCOUNT ON

SELECT TOP (1) * FROM MaTable
WHERE ([Param1] = @Param1) ORDER BY [Param2] DESC

SET @Param2 = scope_identity()

mais il me dit "La conversion du type 'DBNull' en type 'Date' n'est pas valide."
l'erreur se produit au niveau de la ligne "Return CDate(cmd.Parameters("@Param2").Value)"
je me débrouille en sql mais je ne suis pas un expert non plus, j'ai modifié pas mal de truc sans arriver au résultat compté.

Bref, si quelqu'un à une idée :)
Merci par avance

lundi 20 juillet 2009 à 17:14:07 | Re : Retourner un parametre

nivsql

Réponse acceptée !

A mon avis le probleme vient de la :

SET @Param2 = scope_identity()

vu que tu ne fais aucune insertion dans ton code je vois pas vraiment comment la fonction scope_identity() pourrait retourner autre chose que NULL !


Pour mémoire cette fonction retourne la derniere valeur identity (toute table confondue) incrémenté dans le scope (c'est a dire le périmetre) du code appelant ... vu que tu n'insert rien, aucune colone IDENTITY n'est incrémenté, donc la fonction renvoi NULL (que VB appel DBNull)

j'essayerais un truc dans ce style la :

SELECT TOP (1) @Param2 = [Param2] FROM MaTable
WHERE ([Param1] = @Param1) ORDER BY [Param2] DESC

et j'enleverais le SET qui suit le select et ne sert a rien.

lundi 20 juillet 2009 à 17:32:29 | Re : Retourner un parametre

nivsql

Réponse acceptée !

J'ajouterais quelques petites remarques.

J'espere que tu utilise ce genre de requete dans le contexte d'une petite table sinon ton apply est bonne pour avoir des performance de merde, voir de plomber les perf de l'instance.

En effet ta requete lis tous les lignes de MaTable correspondant a @Param1, les tri (en mémoir s'il y'en a peu, dans TempDB s'il y en a beaucoup) et filtre le premier de la liste d'ordre. Cette requete en l'état est inoptimisable et plus il y aura de lignes dans MaTable plus les performances vont se degrader. Bref ce genre de synthaxe est a oublier.

Je te conseillerais d'utiliser uniquement du code pur SQL (donc pas la clause TOP qui est une fonction de fenetrage client) en réecrivant ta requete ainsi :

SELECT @Param2 = max([Param2]) FROM MaTable
WHERE ([Param1] = @Param1)

le resultat sera identique mais le moteur SQL le rendra differament, et si MaTable devait commencer a avoir un volume important, un index sur Param1, Param2 garantirais une stabilité des performances malgrés l'augmentation du nombre de ligne.


Cordiallement.

lundi 20 juillet 2009 à 17:40:11 | Re : Retourner un parametre

scottmat

Membre Club

yes ! impeccable. j'avais essayé sans le SET et ca ne marcher pas.
j'ai essayer avec :

SELECT TOP (1) @Param2 = [Param2] FROM MaTable
WHERE ([Param1] = @Param1) ORDER BY [Param2] DESC
et c'est nickel

encore merci pour ton aide ;)

lundi 20 juillet 2009 à 17:42:32 | Re : Retourner un parametre

nivsql

essaye sans le top et l'order by aussi ;) ton DBA te dira merci ;)

lundi 20 juillet 2009 à 17:44:09 | Re : Retourner un parametre

scottmat

Membre Club

tu as bien fait de me préciser sa, car c'est une grosse table justement. j'ai effectué les modif' et en effet, même rendu.

Encore merci :)



Cette discussion est classée dans : type, cmd, param1, parameters, param2


Répondre à ce message

Sujets en rapport avec ce message

Requete SQL via Siebel [ par riri13 ] Bonjour,Dans la société ou je travail nous utilisons Siebel surcouche d'oracle.Je dois faire des extraction de données pour le reporting mais je ne di Trouver le type des champs de la Bdd [ par chris81 ] bonojour,ya t'il un moyen de connaitre les attributs des champs de la base par exemple j'ai Id_User : intya t'il une requete qui me permettrait de me CREATION DE TYPE TABLE [ par AABS ] Bonjour tout le mondeje travaille sous SQL* Plus (de Oracle 8i)et j'ai fait les instructions suivantes:CREATE TYPE ADRESSE AS OBJECT (RUE CHAR(20),VIL Comparaison VARCHAR/TEXT [ par Athalus ] Bonjour,J'aurais voulu savoir s'il était possible de comparer des variables de type VARCHAR et des variables de type TEXT dans une requète ?J'utilise somme... [ par cid019 ] Salut,je souhaite réaliser une somme mais la je bloque un peu.en fait j'ai un type de personne.Pour chaque type de personne j'ai un champ CA. Et la je Type fichier?? y en a?? [ par Fildomen ] Salutje veux avoir une colonne où le type est bit mais sa valeur change selon la présence d'un fichier( existant = true, sinon false), est-ce-possible If dans query [ par nborges ] Hello,je voudrais savoir si je peux metre un IF dans une query ex:select ID,Descr, Type,if type='R' beginselect.... as Aselect... as Bendelse if  type Liaison [ par RM50Man ] Est ce que sous mysql , il faut indiquer les liaisons entre les bases dans la requete par exemple WHERE ANNONCE.NUM_REGION = REGION.NUM_REGION AND ANN probleme de requete imbriqué (aidez moi svp) [ par oxram ] Bonjour voici ma requete ce qui ne passe pas semble etre le exept mais je vois pas pourquoi :SELECT CODE_LOC_MOBILE_HOME,  LIB_TYPE_MH ,NBRE_PLACES , SP4 sur SQL Server génère erreurs dans SP [ par AngelJo ] J'ai 3 stored procedures qui fonctionnaient tout à fait correctement jusqu'à l'application du SP4. Depuis elles génèrent une erreur et s'arrêtent. Ces


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales