2010-12-10 66 views
0

我已经跟随即时通讯程序的SQL Server:SQL帮助在程序中声明

 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 

凡@txt_id_usuarios是用逗号分隔的用户列表,并现场int_id_usuario是BIGINT类型。 即:

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

当我尝试执行它传递一个字符串作为参数,它返回我跟着错误: 附近有语法错误“1685923789”。

但是没有不正确的语法。

陌生人,如果我删除它的一些工作原理。 I.E:

'6663225047,1122675730,1591119304,1664930592' 

工作正常!

任何意识?

+2

不知道错误,但你的过程不是很安全。尝试读取参数化的SQL和SQL注入。 – 2010-12-10 12:58:18

回答

4

声明@sql VARCHAR(300)

这将您的字符串限制在300个字符。你需要更长的时间

+1

OMG你是天才! (哦,也许不是......也许我太笨了!)THKs! – ozsenegal 2010-12-10 12:59:49

+0

他们给出的例子不超过300个字符。 – 2010-12-10 13:01:22

+0

我不知道为什么SQL不警告我,而不是说:'1685923789'附近的语法不正确。 – ozsenegal 2010-12-10 13:02:11