我们数据库使用存储过程,向动态的表插入数据,为了实现动态表名,将表名参数化处理,将整个执行的sql语句作为字符串。但这时where后面的条件涉及到datetime类型的判断,此时就报错了,不知有没有高手教教怎么处理阿。例子如下
declare @tablename nvarchar(20)
declare @sql
declare @dt datetimeset @sql='insert into '+@tablename+' select * from oritable where dt between dateadd(mi,-10,@dt) and @dt'
此时数据库说要声明dt为标量型变量。
翻了sqlserver的书也没查到什么是标量变量,求高手指点。

解决方案 »

  1.   

    --try
    declare @tablename nvarchar(20)
    declare @sql
    declare @dt datetimeset @sql='insert into '+@tablename+' select * from oritable where dt between dateadd(mi,-10,'''+@dt+''') and '''+@dt+''''
      

  2.   

    declare @tablename nvarchar(20)
    declare @sql
    declare @dt datetimeset @sql='insert into '+@tablename+' select * from oritable where dt between dateadd(mi,-10,''' + Convert(Varchar, @dt, 120) + ''') and ''' + Convert(Varchar, @dt, 120) + ''''
    EXEC(@sql)
      

  3.   

    mugua604(熟不了的木瓜), dt要做類型轉換。
      

  4.   

    哦,dateadd不能用DATETIME类型吗?