新手,请教sql中时间参数问题 表abc123中,字段A1是char格式的,字段A2是datetime格式的,删除A1为空和A2小于给定时间的,以下第一个执行成功,第二个执行不成功
declare @tablename varchar(50)
declare @sql varchar(200)
declare @stime datetime
set @time=''+CONVERT(varchar(100), GETDATE()-1, 23)+' 00:00:00'
set @tablename='abc123'
set @sql='delete from '+ '[dbo].['+rtrim(@tablename)+ ']' +'where A1 is null'
execute (@sql)
set @sql='delete from '+ '[dbo].['+rtrim(@tablename)+ ']' +'where A2 <'+@time+''
exec(@sql)——执行不成功,报错:从字符串转换日期和/或时间时,转换失败。
把 '+@time+'直接换成@time,报错:A2附近有语法错误
请教,这个地方时间参数@time该怎么处理?
------最佳解决方案-------------------- 试试:set @sql='delete from '+ '[dbo].['+rtrim(@tablename)+ ']' +' where A2 <'''+convert(varchar(20),@time)+'''' ------其他解决方案--------------------
set @sql='delete from '+ '[dbo].['+rtrim(@tablename)+ ']' +'where A2 <'''+@time+'''' ------其他解决方案-------------------- @sql在exec了一次之后就释放了,你要么换一个名字,要么重新赋值 ------其他解决方案-------------------- declare @time varchar(20) ------其他解决方案-------------------- set @sql='delete from '+ '[dbo].['+rtrim(@tablename)+ ']' +'where A2 <'+convert(varchar(20),@time)+''
------其他解决方案--------------------
如果这样的话,会出现
delete from abc123 where A2 <2012-11-15 00:00:00,因为没有引号,所以运行也无法进行,如果在'+convert(varchar(20),@time)+'外再加引号,又不对,这个地方改怎么解决呢?谢谢~ ------其他解决方案--------------------