小弟遇一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)