DECLARE @SQL nvarchar(2000)
DECLARE @dt datetime
SET @dt=getdate()
set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,@dt)=0'
EXEC sp_executesql @SQL
存储过程中有类似的语句,为什么这样写一直报:
必须声明标量变量 "@dt"。

解决方案 »

  1.   

    3. 输出参数 
    declare @num int, @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  2.   

    DECLARE @SQL nvarchar(2000)
    DECLARE @dt datetime
    SET @dt=getdate()
    set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,'+rtrim(@dt)+')=0'
    EXEC sp_executesql @SQL
      

  3.   

    DECLARE @SQL nvarchar(2000)
    DECLARE @dt datetime
    SET @dt=getdate()
    set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,@dt)=0'EXEC sp_executesql @SQL,N'@dt datetime',@dt
      

  4.   

    set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,'+ @dt +')=0'
      

  5.   

    DECLARE @SQL nvarchar(2000)
    DECLARE @dt datetime
    SET @dt=getdate()
    set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,''' + convert(varchar(10),@dt,120) + ''')=0'
    EXEC sp_executesql @SQL
      

  6.   

    EXEC sp_executesql @SQL,N'@dt datetime',@dt正解,感谢
      

  7.   

    EXEC sp_executesql @SQL,N'@dt datetime',@dt
      

  8.   


    DECLARE @SQL nvarchar(2000)
    set @SQL=N'select * FROM MyData where DATEDIFF(d,CreateDate,getdate())=0'
    EXEC sp_executesql @SQL