2009-12-09 4 views
1

Je n'ai pas pu résoudre cette question mystère dans SQL SERVER.Définition d'une requête SQL AS une variable ou un paramètre (Entier préféré) et son utilisation

Voici un exemple que j'ai essayé de faire et cela n'a pas fonctionné.

DECLARE @Total int; 
SET @Total = (SELECT COUNT(*)-10 FROM MYTABLE) 

SELECT TOP @Total IdColumn FROM MYTABLE 

Comment puis-je utiliser la requête suivante

SELECT COUNT (*) - 10 à partir de MYTABLE

comme une variable entière, quelque part ailleurs dans mon code.

+0

Selon la façon dont MYTABLE est configuré, vous pouvez inclure la commande dans la requête afin que vous peut être sûr que vous obtenez les résultats que vous attendez. –

Répondre

5

Lorsque vous utilisez une variable dans une clause supérieure, vous devez utiliser des parenthèses, comme ceci:

SELECT TOP (@total) IdColumn DE MYTABLE

Si vous utilisez SQL2000, vous ne pouvez pas utiliser variable dans une clause top. Si vous essayez, vous obtiendrez une erreur d'analyse syntaxique. Au lieu de cela, vous pouvez utiliser RowCount, comme ceci:

DECLARE @Total int; 
SET @Total = (SELECT COUNT(*)-10 FROM MYTABLE) 

Set RowCount @Total 
SELECT IdColumn FROM MYTABLE 
Set RowCount 0 
+0

Juste testé et cela fonctionne ... pas de panique ... J'ai raté tout ce temps .../moi échoue. +1: D –

+0

Donne cette erreur pour moi Ligne 4: syntaxe incorrecte près de '('. – stckvrflw

+0

Je viens de mettre à jour ma réponse pour inclure la fonctionnalité SQL2000 Vous devriez probablement avoir mentionné la version de SQL Server que vous utilisez dans votre question initiale –

1

Utilisez Supports: Les travaux suivants pour moi:

DECLARE @Total int; 
SET @Total = (SELECT COUNT(*)-10 FROM MYTABLE) 

SELECT TOP (@Total) IdColumn FROM MYTABLE 
+0

Ligne 4: Syntaxe incorrecte près de '(' Exactement les mêmes choses que j'ai écrit – stckvrflw

+0

Oui vous avez raison: Cela ne fonctionne que pour SQL Server 2003 et plus. – zoidbeck

Questions connexes