第一个 ,@date应该是字段名称吧。 varchar类型,另外拼接的时候也要+在一起。跟@condition一样第二个,也是一样的问题,lz修改一下看看。 

解决方案 »

  1.   

    不是字段名称  是声明传过来的参数    如过传递的@Date为空  则为当前时间
      

  2.   

    第一,动态执行,参数取不到外面的第二,@Date要主动转化为字符串
      

  3.   


    DECLARE @sql VARCHAR(MAX) , @condition VARCHAR(255)= 'test=0'
    DECLARE @Date DATETIME = NULL
    IF @Date IS NULL
    SET @Date=GETDATE()
    SET @sql = ' delete Personal_Moeny_LockMoney where ' + @condition + ' and '
        + 'DATEDIFF(MONTH,Lock_Date,'+''''+ CONVERT(VARCHAR(10), @Date, 112)+''''+' )=0' 
    SELECT  ( @sql ) --将其调整为 EXEC sys.sp_sqlexec @sql
    ------------------------------------
     delete Personal_Moeny_LockMoney where test=0 and DATEDIFF(MONTH,Lock_Date,'20150306' )=0