存储过程 insert 时日期类型出错
当@B_indate ,@B_outdate插进去时数据总是1905年的。月份和日都没什么规律。请叫高手。
create procedure memberbook
@R_id varchar(20) , --客房类型
@bo_amount int, --订房数量
@M_id Varchar(20) , --会员号
@B_indate datetime , --预计入住时间
@B_outdate datetime --离开时间
as
declare @aa varchar(200)
set @aa='insert into Bookin values('''+@R_id+''','+ rtrim(@bo_amount)+','''+ @M_id+''','+convert(varchar(10),@B_indate,20)+','+ convert(varchar(10),@B_outdate,20)+')'exec(@aa)
--exec sp_executesql @aa,N'@cc int output',@cc output
go
[解决办法]
1,首先,这种语句没必要用动态语句,因为你的表名和列名不是未知的.INSERT INTO Bookin VALUES @R_id,@bo_amount,@m_id,....2,你出错的原因在于:,'+convert(varchar(10),@B_indate,20)+','+ convert(varchar(10),@B_outdate,20)+')这句里面,日期量没有进行定界.相当于你语句里执行的:INSERT INTO ... VALUSE ,....,2008-1-1,2008-2-1看下面就明白了.DECLARE @d DATETIMESET @d=2008-7-1 --这里进行了数学运算,得到 2000, SET @d=2000 ,即以1900-1-1开始,以天为单位加上2000天,当然得到1905年了.SELECT @d也请参见http://topic.csdn.net/u/20071210/22/bc50a527-58cc-42e0-849b-5457d1fb68f0.html
[解决办法]