exec('select * from 表 where 列 in ('+@你的变量+')')

解决方案 »

  1.   

    可以,但必须用动态SQL

    DECLARE @ VARCHAR(100)
    SET @ = '1,2,3'
     EXEC ('SELECT * FROM SYSOBJECTS WHERE ID IN ('+ @ +')')
      

  2.   

    前两位兄弟说的是一样的,但我试着改过出现语法错误.下面是部分代码:CREATE PROCEDURE SP_GenerateDeliveryPlan1
    ( @OrderIDs varchar(200), --用,号分开,形式为:'1','2','3'
      @DeliveryMan varchar(20),
      @ConsignerID varchar(30)
             )
    AS
    BEGIN 
      select @CurrDate=convert(varchar(20),getdate(),20)
      select @COrderNO='DL'+substring(@CurrDate,3,2)+substring(@CurrDate,6,2)+substring(@CurrDate,9,2)+substring(@CurrDate,12,2)+substring(@CurrDate,15,2)+substring(@CurrDate,18,2)
      select @Errors=@Errors+@@error
      if @Errors<>0
    goto Err_Exit
       insert into JT_DeliveryBill(DeliveryID,ConsignerID,GenerateDT,DeliveryMan,State)
    values (@COrderNO,@ConsignerID,getdate(),@DeliveryMan,'生成计划')
      declare Cursor1 cursor for
      --该句找不到记录
      select OrderID,GoodsID,GoodsName,RemainQty from JT_OrderDetail where RemainQty>0 and State=1 and cast(OrderID as varchar(20)) in (@OrderIDs)
      --改为下面后有此处有语法错误
      exec ('select OrderID,GoodsID,GoodsName,RemainQty from JT_OrderDetail where RemainQty>0 and State=1 and cast(OrderID as varchar(20)) in ('+@OrderIDs+')')
      open Cursor1
      

  3.   

    declare @OrderIDs varchar(100)
    set @OrderIDs='1,2'declare @qsql nvarchar(200)
    set @qsql ='select OrderID,GoodsID,GoodsName,RemainQty  from JT_OrderDetail  where RemainQty>0 and State=1 and cast(OrderID as varchar(20)) in ('
    set @qsql =@qsql+@aid+')'
    execute sp_executesql @qsql
      

  4.   

    1、查询分析器写入:declare @a varchar(1000)
    set @a='23,345,56'
    exec('select 1 where 23 in ('+@a+')')证明是对的!2、你的游标写错了:
      exec ('declare Cursor1 cursor for select OrderID,GoodsID,GoodsName,RemainQty from JT_OrderDetail where RemainQty>0 and State=1 and OrderID in ('+@OrderIDs+')')