2010-12-10 92 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