日期:2014-05-19  浏览次数:20500 次

小弟遇一sql server动态表名问题,求高手帮忙!
我们数据库使用存储过程,向动态的表插入数据,为了实现动态表名,将表名参数化处理,将整个执行的sql语句作为字符串。但这时where后面的条件涉及到datetime类型的判断,此时就报错了,不知有没有高手教教怎么处理阿。

例子如下
declare   @tablename   nvarchar(20)
declare   @sql
declare   @dt   datetime

set   @sql= 'insert   into   '+@tablename+ '   select   *   from   oritable   where   dt   between   dateadd(mi,-10,@dt)   and   @dt '
此时数据库说要声明dt为标量型变量。
翻了sqlserver的书也没查到什么是标量变量,求高手指点。

------解决方案--------------------
--try
declare @tablename nvarchar(20)
declare @sql
declare @dt datetime

set @sql= 'insert into '+@tablename+ ' select * from oritable where dt between dateadd(mi,-10, ' ' '+@dt+ ' ' ') and ' ' '+@dt+ ' ' ' '

------解决方案--------------------
declare @tablename nvarchar(20)
declare @sql
declare @dt datetime

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