首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

新手,请问sql中时间参数有关问题

2012-12-24 
新手,请教sql中时间参数问题表abc123中,字段A1是char格式的,字段A2是datetime格式的,删除A1为空和A2小于给

新手,请教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)+''''
[其他解释]

引用:
引用:declare @time varchar(20)

定义成varchar行驶后,外面的单引号该怎么加呢?加上以后显示为字符串,不显示参数内容

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)+''

[其他解释]
引用:
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)+'外再加引号,又不对,这个地方改怎么解决呢?谢谢~  
[其他解释]
引用:
declare @time varchar(20)


定义成varchar行驶后,外面的单引号该怎么加呢?加上以后显示为字符串,不显示参数内容
[其他解释]
引用:
试试:set @sql='delete from '+  '[dbo].['+rtrim(@tablename)+ ']'  +' where A2 <'''+convert(varchar(20),@time)+''''


这个好了,谢谢,之前总考虑到双引号,原来是多个单引号的,下次会注意~谢谢!
[其他解释]
引用:
引用:引用:declare @time varchar(20)

定义成varchar行驶后,外面的单引号该怎么加呢?加上以后显示为字符串,不显示参数内容
set @sql='delete from '+  '[dbo].['+rtrim(@tablename)+ ']'  +'where A2 <''……


好了,谢谢!~

热点排行
Bad Request.