2017-07-25 3 views
1

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 variableName être la valeur qu'il aurait autrement eu je cours toute la déclaration à ce moment précis que j'ai choisi ...Comment exécuter des requêtes SQL sélectionnées avec des variables incluses?

Exemple de code complet:

DECLARE @cat INT; 

SET @cat = 2; 

SELECT * FROM TableName 
WHERE ColumnName = @cat; 

Exemple de ma sélection que je veux courir sans inclure déclaration/lignes définies:

SELECT * FROM TableName 
WHERE ColumnName = @cat; 

Probablement pas possible, mais je pensais que ce serait vaut le coup.

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

+0

Poster la requête .. Lorsque la variable est utilisée dans la requête, l'instruction 'declare' devrait faire partie de l'exécution sinon vous obtiendrez cette erreur ... –

+0

@P ரதீப் Je ne peux pas pour des raisons de confidentialité, désolé. Je pourrais remplacer des noms et des choses mais le code est assez long et cela prendrait une éternité .. euh je pourrais essayer un exemple 1 sec. –

+0

Il suffit d'inclure le code qui définit/initialise la variable avant et avec la requête actuelle. Puis F5 le tout ensemble. –

Répondre

1

Je comprends d'où vous venez. C'est un extrait d'une longue procédure ou quelque chose et naturellement vous voulez garder les déclarations au sommet, 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.

En outre, c'est généralement comme cela 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é.

0

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

DECLARE @cat INT; 
SET @cat = 2; 
Convert(varchar, @cat) 

SELECT * FROM TableName 
WHERE ColumnName = @cat; 

OU

déclare directement

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

Hope this helps

0

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

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

cette façon, aucune variable « scalaire » est nécessaire, mais pas aussi pratique comme une simple requête paramétrées en utilisant une clause directe WHERE. 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.