2010-11-03 4 views
1

J'écris un script sql, et j'aimerais utiliser Management Studio pour développer la requête, et un programme C# pour l'exécuter en production.Variables SQL; déclarer quand un paramètre n'est pas présent

Ma requête contient des paramètres, comme ceci;

SELECT * FROM TABLE 
WHERE id = @id 

Je peux nourrir une valeur pour @id dans le programme C#, et qui fonctionne bien. Cependant, je veux également déclarer les valeurs par défaut pour les tests dans Management Studio. Donc, je veux vraiment écrire quelque chose comme ce pseudo-code;

if not declared @id 
    declare @id int 
    set @id=43 
end if 

SELECT * FROM TABLE 
WHERE id = @id 

Y at-il un moyen de vérifier si un nom de variable a déjà été utilisé?

Répondre

1

J'ai réussi à faire quelques progrès en marquant les variables par défaut dans le script, comme ça; Ensuite, prétraiter le script dans mon programme C#, comme ceci;

/** DEFAULTS **/ 

declare @id int 
set @id = 43 

/** END DEFAULTS **/ 

script = RemoveBlock(script, "DEFAULTS"); 

Et d'implémenter la fonction comme ceci;

public static string RemoveBlock(string script, string blockName) 
{ 
    if (script == null) { return null; } 

    var startTag = string.Format("/** {0} **/", blockName); 
    var endTag = string.Format("/** END {0} **/", blockName); 

    var startTagIdx = script.IndexOf(startTag); 
    if (startTagIdx == -1) { return script; } 

    var endTagIdx = script.IndexOf(endTag, startTagIdx + startTag.Length); 
    if (endTagIdx == -1) { return script; } 

    var endOfEndTag = endTagIdx + endTag.Length; 

    var beforeBlock = script.Substring(0, startTagIdx); 
    var afterBlock = script.Substring(endOfEndTag); 

    return beforeBlock + afterBlock; 
} 

Le programme C# exécute donc une version sans les variables mais avec des paramètres.

4

Vous ne pouvez pas faire exactement ce que vous recherchez. Je vous suggère soit:

1) envelopper le script comme un sproc et donner les valeurs par défaut pour les params
2) comprennent un bloc de commentaires en haut du script que vous pouvez décommenter lors de l'exécution dans SSMS:

/* 
-- Default variables for testing 
DECLARE @Id INTEGER 
SET @Id = 43 
*/ 
SELECT * FROM Table WHERE id = @Id 
+0

Salut. J'avais des pensées similaires ... Je ne peux pas modifier la base de données, donc je ne peux pas l'écrire comme un SP; Le bloc de commentaire est la façon dont je vais en ce moment. –

+0

Une suggestion: utilisez le - au lieu de/*, de sorte que vous pouvez utiliser les boutons de barre d'outils de commentaire et de décommenter dans le studio de gestion. –

Questions connexes