2010-12-10 17 views
0

J'ai procédure im suivi SQL Server:SQL Aide dans la procédure dans l'instruction

 alter procedure sp_selectfFriends_by_cities 
     (
      @txt_id_usuarios varchar(300) 
     ) 
     as 
     begin 
     declare @sql varchar(300) 
     set @sql = 'select 
        a.int_id_usuario, 
        a.int_id_cidade, 
        b.txt_nome_cidade, 
        b.txt_nome_estado 
        from 
         tb_cidades_visitadas a 
         left join 
         tb_cidades 

     b on b.int_id_cidade = a.int_id_cidade 
where int_id_usuario in (' + @txt_id_usuarios + ')' 
       execute(@sql) 
     end 

Où @txt_id_usuarios est une liste d'utilisateurs séparés par des virgules, et le int_id_usuario de champ est le type de BIGINT. -à-dire:

'6663225047,1122675730,1591119304,1664930592,1685923789,100000235882380,100000292471037,100000466411115' 

Lorsque je tente de l'exécuter en passant cette chaîne comme paramètre, il me retourne suivre erreur: syntaxe incorrecte près de « 1685923789 ».

Mais il n'y a AUCUNE syntaxe incorrecte. Plus étrange si j'enlève des ID cela fonctionne. I.E:

'6663225047,1122675730,1591119304,1664930592' 

Fonctionne bien!

Un idéias?

+2

Vous n'êtes pas sûr de l'erreur, mais votre proc n'est pas très sécurisé. Essayez de lire une injection sql et sql paramétrée. –

Répondre

4

Oui

@sql varchar déclare (300)

Cela limitera votre chaîne à 300 caractères. Vous devez le rendre plus long

+1

OMG vous êtes un génie! (oh, peut-être pas ... peut-être que je suis trop stupide!) THKs !! – ozsenegal

+0

L'exemple donné n'a pas plus de 300 caractères. –

+0

Je me demande pourquoi SQL ne m'avertit pas, au lieu de continuer à dire: Syntaxe incorrecte près de '1685923789'. – ozsenegal