2010-12-10 4 views
13

A partir d'une application cliente je fais tyipically:Comment écrire une requête paramétrée dans un studio de gestion?

select * from table where Name = :Parameter 

puis avant d'exécuter la requête je fais

:Parameter = 'John' 

Ces paramètres ne sont pas une recherche & mais Replace paramètres réels transmis au serveur. Puisque j'ai besoin de tester certaines de ces requêtes en détail, comment puis-je écrire la requête dans le studio de gestion?

Je veux écrire la requête avec des paramètres et donner une valeur au paramètre. Comment cela peut-il être fait?

Mise à jour:

Pour supprimer la confusion ici, j'ajouter des informations à mieux exprimer myseld.

quand j'exécute une requête normale que je vois dans le serveur sql profileur

select * from table where Name = 'John' 

alors quand j'exécutons une requête paramétrisé Je vois ceci:

exec sp_executesql N'select * from table 
where Name = @P1',N'@P1 varchar(8000)','John' 

Voilà pourquoi je dis que ce n'est pas un chercher et remplacer.

+0

La mise à jour fait à peu près ce que je vous ai montré dans ma réponse ... –

+0

Ok vous avez raison. Donc ce que j'ai obtenu c'est que lorsqu'une application cliente utilise des paramètres, elle décale des variables avec DELCARE. Très intéressant, cela aide à résoudre un problème que j'ai. – LaBracca

+0

Pour vous expliquer pourquoi j'ai posé cette question, je vous redirige vers ma dernière question: http://stackoverflow.com/questions/4408551/select-statment-performance-degradation-when-using-distinct-with-parameters – LaBracca

Répondre

21

Que diriez-vous quelque chose comme

DECLARE @Parameter VARCHAR(20) 
SET @Parameter = 'John' 

SELECT * 
FROM Table 
WHERE Name = @Parameter 
+0

Non c'est "Serach and replace", de cette façon je ne dis pas à sql_server que c'est un paramètre. – LaBracca

+0

S'il vous plaît voir ma mise à jour à la question afin que vous obtenez ce que je veux dire. – LaBracca

0

Avec plus de Adriaan Stander réponse dans votre code-à-dire par exemple si vous utilisez C# vous assurer passer le @parameter via l'encapsulation
exemple de code ci-dessous pour vous d'étudier:

  using (SqlConnection conn = new SqlConnection(conString)) 
      { 
       conn.Open(); 

       SqlCommand cmd = new SqlCommand(userSql, conn); 
       cmd.Parameters.AddWithValue("@parameter", parameter); 


       conn.Close(); 

      } 

Bien sûr, ce qui précède n'est pas un code complet mais vous donnera une idée.

Questions connexes