2010-03-26 7 views
0

J'ai une variable @count de type de données int.Je suis en train de définir des valeurs pour ce @count.
Je veux sélectionner le nombre de lignes @count supérieur de la table. Lorsque j'utilise Select top @count, son erreur d'affichage.Préoccupé par Top en SQL

IF (@NewItemCount<@OldItemCount) 
    BEGIN 
     set @[email protected]@NewItemCount 
     if(@count>0) 
     BEGIN 
      Delete from ItemDetails where GroupId in (Select Top @count Id from ItemDetails where [email protected]_GroupId) 
     END 
    END 

L'erreur est

syntaxe incorrecte près de '@count'.

+0

Qu'est-ce que vous essayez de faire ici, il ne fait pas vraiment de sens ... Au niveau de base que vous avez besoin d'un @Count = Id dans votre déclaration de sous, mais pas sûr de ce que cela fera ... – Paddy

+0

tout aussi perdu - essayez d'énoncer ce que vous faites en termes simples sans aucun code. –

Répondre

1

Si vous allez aller dans le SQL dynamique, je vous recommande de lire this excellent article first

Edit:

Envelopper la variable @count entre parenthèses devrait travailler pour vous:

IF (@NewItemCount<@OldItemCount) 
BEGIN 
    set @[email protected]@NewItemCount 
    if(@count>0) 
    BEGIN 
     Delete from ItemDetails where GroupId in (Select Top(@count) Id from ItemDetails where [email protected]_GroupId) 
    END 
END 
3

Il n'est pas possible d'utiliser une variable à cet endroit.

Une solution consisterait à utiliser SQL dynamique: créer la chaîne de requête complète que vous voulez exécuter dans une variable de chaîne et l'exécuter.

+0

pouvez-vous montrer un exemple – user42348

2

Cela fonctionne hors de la boîte sur SQL Server 2005 sans tout SQL dynamique.
Vous manquiez de parenthèses. À la suite fonctionne comme un charme:

DECLARE @CNT INT 
SET @CNT = 5 

SELECT TOP (@CNT) * 
FROM MYTABLE 
+0

Son erreur indiquant que la syntaxe incorrecte près de '('. Ne fonctionne pas – user42348

+0

avez-vous vraiment SQL Server 2005? – van