前一句IN的范围有两个值,分别是 ALFKI 和 ANATR。
后一句IN的范围只有一个值,是 ALFDI','ANATR(单引号是字符串值内容)。
有多少个值就要定义多少个参数
exec sp_executesql N'select * from customers where customerid in (@customerid1,@customerid2)',
                   N'@customerid1 varchar(8000),@customerid2 varchar(8000)',
                   @customerid1='ALFKI',
                   @customerid2='ANATR'

解决方案 »

  1.   


    额,因为这个@customerid1是不定的,没法确定要定义几个参数
      

  2.   

    用字符加减  DECLARE @Sql NVARCHAR(max)
      SET @Sql=N'select * from customers where customerid in ('''+'ALFKI'',''ANATR'+''')'
      exec sp_executesql @Sql
      

  3.   


    后一句IN的范围只有一个值,是 ALFDI','ANATR(单引号是字符串值内容)。
    值是ALFDI','ANATR,然后会在两端自动插入单引号,那应该就是两个值in ('ALFDI','ANATR')吧
      

  4.   

    不支持in()--直接传参多个值
    只能这样用
    EXEC sp_executesql N'SELECT top 2 * FROM sys.all_objects where Name IN(@Names)',N'@Names NVARCHAR(200)',@Names='sysrscols'
      

  5.   

    当然查不出来啦,这样本身就有语法问题了
    把你的动态执行拿出来看,你就明白了
    它等价于DECLARE @customerid VARCHAR(8000)
    SET @customerid='ALFKI'',''ANATR'
    select * from customers where customerid in (@customerid)
      

  6.   

    不定个数直接拼SQL吧
    DECLARE @sql nvarchar(max)
    DECLARE @customerid nvarchar(max)
    SET @customerid=N'''ALFKI'',''ANATR'''
    SET @sql = N'select * from customers where customerid in ('+@customerid+N')'
    --PRINT @sql
    exec sp_executesql @sql
      

  7.   

    你可以试一下用char(39)代替',
    比如set varStr1='abc'+char(39)+'ef',将会得到abc'ef