过程IN语句中的SQL帮助

时间:2010-12-10 12:53:00

标签: sql sql-server tsql

我遵循SQL Server的程序:

      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'附近的语法不正确。

但没有错误的语法。

如果我删除了一些有效的ID,则更加奇怪。 即:

'6663225047,1122675730,1591119304,1664930592'

工作正常!

任何想法?

1 个答案:

答案 0 :(得分:4)

声明@sql varchar(300)

这会将您的字符串限制为300个字符。你需要延长时间