[sql server] 从字符串向 datetime 转换时失败

yuna@liu 2010-02-02 10:34:54
dbo_a 表
id int identity(1,1),
m_name varchar(20),
m_start datetime,
m_expire datetime

dbo_b
m_name varchar(20),
m_start datetime,
m_expire datetime


现在,要把dbo_a表中 ,过过期 m_expire>=getdate() 的记录移至dbo_b

使用游标:
declare @m_id int ,@m_name varchar(20), @m_start datetime ,@m_expire datetime
declare mycursor cursor scroll for
select * from dbo_a where m_expire>=getdate()
declare @i int
open mycursor
set @i= @@cursor_rows
while @i>0
begin
fetch next from mycursor into @m_id,@m_name,@_start,@m_expire --****提示 从字符串向 datetime 转换时失败

set @i=@i-1
insert into mail_history values (m_name,@_start,@m_expire)
if( @@fetch_status!=0)
begin
delete from mail_queue where M_id=@m_id
set @@fetch_status=0
end
end
close mycursor
deallocate mycursor

我想可能是,从游标行中读取的都是字符类型的

所以我做了下面的更改
////////////////
declare @m_id int ,@m_name varchar(20), @m_start varchar(50) ,@m_expire varchar(50) --这里更改成varchar类型
declare mycursor cursor scroll for
select * from dbo_a where m_expire>=getdate()
declare @i int
open mycursor
set @i= @@cursor_rows
while @i>0
begin
fetch next from mycursor into @m_id,@m_name,@_start,@m_expire
set @i=@i-1
insert into mail_history values (m_name,convert(datetime,@_start),convert(datetime,@m_expire)) ---*****这里提示从字符串向 datetime 转换时失败
if( @@fetch_status!=0)
begin
delete from mail_queue where M_id=@m_id
set @@fetch_status=0
end
end
close mycursor
deallocate mycursor

这是为什么啊??
...全文
1199 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸭梨山大帝 2010-02-03
  • 打赏
  • 举报
回复
1.select * from dbo_a where m_expire>=getdate()
请勿使用 * , 指定具体的栏位

2.insert into mail_history values (m_name,convert(datetime,@_start),convert(datetime,@m_expire))
提示很明白了:convert(datetime,@_start),convert(datetime,@m_expire)
请确认 : ,@_start ,@m_expire 变量的值可以转换为DateTime
  • 打赏
  • 举报
回复
select * from dbo_a where m_expire>=getdate() 楼主查的这个字段一定要和
fetch next from mycursor into @m_id,@m_name,@_start,@m_expire 这几个变量的类型相对应
  • 打赏
  • 举报
回复
这是我从网上看到的,看楼主是不是这个原因

关于“从字符串向 datetime 转换时失败。”问题(2007-03-04 21:33:23) 分类:编程之路
最近整理程序时,突然发现一个问题,就是“从字符串向 datetime 转换时失败。”这个错误

我看了一下我以前做过的程序现在在运行都会出这个错

而我现在做的就没有,因为我现在的毕业设计里用的数据操作都是存储过程,而以前的都是直接用的SQL语句,目前网上还没看到解决这个问题的答案,不过个人认为,这个和升级framework 2.0补丁或Framework 3.0有关,因为以前做ASP.NET是没遇到这个问题的,现在突然出这个错误了

感觉和升级有关,可能是为了安全性,framework做安全修改

string Str = "insert into Article(Title,Content,DateAndTime,Author,ClassName)Values('" + TextBox1.Text + "','" + Content.Text + "','" + DateTime.Now + "','" + TextBox2.Text + "','" + DropDownList1.SelectedValue + "')";

这个是插入语句,以前没错,现在运行就有错,就是那个“从字符串向 datetime 转换时失败。”的错误
yuna@liu 2010-02-03
  • 打赏
  • 举报
回复
试过各位的方法。
答案找到了:
select * from dbo_a where m_expire>=getdate()
请勿使用 * , 指定具体的栏位 Lost_Painting

真的把* 改成字段名字,就不报错了 ,可是这是为啥呢????

还有疑问?????如下:

使用游标cursor , select * 得出来的结果集,各字段默认为字符类型

所以我在修改方案中,用 @m_start varchar(30) ,@m_expire varchar(30)

insert into mail_history values (m_name,convert(datetime,@_start),convert(datetime,@m_expire)) 执行这句还是报错了 从字符串向 datetime 转换时失败 这是为么事呢 。我确认@_start ,@m_expire 变量的值可以转换为DateTime
wingfeng_2006 2010-02-02
  • 打赏
  • 举报
回复
不清楚,关注
bwangel 2010-02-02
  • 打赏
  • 举报
回复
BS游标
随风落梦 2010-02-02
  • 打赏
  • 举报
回复
不清楚,米用过游标
moondreamyou 2010-02-02
  • 打赏
  • 举报
回复
建议去SQL板块问。

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧