Comment exécuter des requêtes SQL sélectionnées avec des variables incluses?

Je veux être en mesure d'exécuter un extrait de ma requête SQL en le sélectionnant et en appuyant sur F5 . Le problème est, si cette sélection contient un nom de variable, j'obtiens une erreur: Must declare the scalar variable "@variableName". . Y-a-t-il une façon de résoudre ceci? Je veux que variableName soit la valeur qu'il aurait autrement si j'avais exécuté toute la déclaration à ce moment-là dans le time que j'ai choisi …

Exemple de code complet:

 DECLARE @cat INT; SET @cat = 2; SELECT * FROM TableName WHERE ColumnName = @cat; 

Exemple de ma sélection que je veux exécuter sans inclure les lignes de déclaration / set:

 SELECT * FROM TableName WHERE ColumnName = @cat; 

Probablement pas possible mais je me suis dit que ça valait le coup.

PS Je suis un noobie SQL donc si je manque quelque chose d'évident, faites le moi savoir!

Je comprends d'où tu viens. C'est un extrait d'une longue procédure ou quelque chose et naturellement vous voulez garder les déclarations au sumt, ce que je suis d'accord avec. Dans ce cas, lorsque vous testez, le seul moyen de contourner ce problème consiste à le déclarer de nouveau et à le définir en haut de votre extrait. Ensuite, lorsque vous exécutez le lot entier de code, commentez cette ligne. Sinon, vous devrez envelopper l'extrait dans un bloc try / catch pour essayer d'attraper les erreurs de compilation, ce qui est délicat.

Aussi, c'est généralement comme ça que j'ai vu des gens mettre un select * de someWorkTable pour tester les résultats en cours de route. Ensuite, il est commenté lorsque le lot est exécuté.

Cliquez avec le button gauche sur le nom de la table, cliquez avec le button droit de la souris et vous pouvez afficher le type de données du nom de la colonne. si c'est nvarchar ..

 DECLARE @cat INT; SET @cat = 2; Convert(varchar, @cat) SELECT * FROM TableName WHERE ColumnName = @cat; 

OU

déclarer directement

 DECLARE @Cat VARCHAR(3) SET @cat = '2' SELECT * FROM TableName WHERE ColumnName = @cat; 

J'espère que cela t'aides

Vous pouvez simuler votre variable comme déclarée dans une requête select avec un résultat d'alias. Ensuite, vous pouvez simplement utiliser alias.column dans le cadre de votre jointure …

 SELECT TN.* FROM ( select '2' as TmpColumn ) tmpAlias JOIN TableName TN on tmpAlias.TmpColumn = TN.ColumnName 

De cette façon, aucune variable "scalaire" n'est requirejse, mais pas aussi pratique qu'une simple requête paramétrée utilisant une clause WHERE directe. De plus, vous pouvez utiliser alias.column dans le cas où vous auriez d'autres relations de tables, etc. ou même d'autres "variables" que vous vouliez appliquer dans votre requête.