存储过程 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
------解决方案--------------------SQL code
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 DATETIME
SET @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
------解决方案--------------------