请问!!存储过程如何根据条件成批添加多条记录? 另:执行存储过程的测试时,DateTime类型的数据该怎么输? (100分)

  • 主题发起人 主题发起人 guilinlzy
  • 开始时间 开始时间
G

guilinlzy

Unregistered / Unconfirmed
GUEST, unregistred user!
表TbAutoState结构:
AutoState_Id,//车编号
AutoState_DateTime,//车态时间
AutoState_StateType,//车态类型
存储过程Sp_InitAutoState结构为:
CREATE procedure InitAutoState_Sp(
@StartDateTime datetime,//起始时间
@DaysNumber int,//截止天数
@return nvarchar(20) output)
要实现的存储过程要求为:
1.TbAutoState为空,现要根据下列条件初始化该表;
2.对所有车(AutoState_Id),对指定的日期@StartDateTime连续DaysNumber置AutoState_StateType为"0";
3.AutoState_Id由select Auto_Id from TbAuto检索得来。

如何初始化该表的数据,请大伙出主意,谢了。
 
先把你的表改一下,
表TbAutoState结构:
AutoState_Id,//车编号
AutoState_StartTime,//车态开始时间
AutoState_DateNumber,//车态时间
AutoState_StateType,//车态类型
然后
CREATE procedure InitAutoState_Sp( @StartDateTime datetime,@DaysNumber int,
@return nvarchar(20) output)
As
begin

Update TbAutoState set AutoState_StateType = 0 where AutoState_StartTime = @StartDateTime and AutoState_DaysNumber >= @DaysNumber
@return := 'Updated'
end
 
TO lgsnake:
不能做这样的修改的。
说明:要成批添加的是所有的AutoState_Id,一一对应到的从起始时间@StartDateTime截止到dateadd(day,@DaysNumber,@StartDateTime)
的所有时间,还有就是将置AutoState_StateType为"0"
 
示例:
表TbAutoState原为空
现设@DaysNumber=5,成批添加后其结果为:
AutoState_Id AutoState_DateTime AutoState_StateType
100 2002-10-24 0
. . .
100 2002-10-28 0
101 2002-10-24 0
. . .
101 2002-10-28 0
依次类推以初始化该表。 .
 
4.若要算到@DaysNumber的截止日期,可以使用dateadd(day,@DaysNumber,@StartDateTime)即可解决。
 
先生成一个存放所有时间的表(Table1),然后:
insert into TbAutoState
select AutoState_Id ,AutoState_DateTime(时间表的时间字段),0 from TbAuto,Table1
 
目前调试的代码如下:
CREATE procedure InitAutoState_Sp(
@StartDateTime datetime,
@DaysNumber int,
@return nvarchar(20) output
) as
declare @i int
set @i=0
while @i<=@DaysNumber
begin
insert into TbAutoState(AutoState_DateTime,AutoState_Auto_Id,AutoState_StateTypeId)
values(select distinct Auto_Id from TbAuto,dateadd(day,@i,@StartDateTime),'0')
set @i=@i+1
end
select @return='S_OK'
return
GO
错误出现在:
values(select distinct Auto_Id from TbAuto,dateadd(day,@i,@StartDateTime),'0')
请问如何将select distinct Auto_Id from TbAuto设为一个变量能不断的循环赋值呢?
 
初步完成如下:
CREATE procedure InitAutoState_Sp(
@StartDateTime datetime,
@DaysNumber int,
@return nvarchar(20) output
) as
declare @i int
set @i=0
while @i<=@DaysNumber
begin
insert TbTempAutoState(AutoState_DateTime,AutoState_Auto_Id,AutoState_StateTypeId)
select distinct Auto_Id ,dateadd(day,@i,@StartDateTime),'0' from TbTempAuto
set @i=@i+1
end
select @return='S_OK'
return
GO
不过我有这样的一个问题,执行存储过程的测试时,DateTime类型的数据该怎么输的
我这样有错:
declare @i nvarchar(20)
exec InitAutoState_Sp '2002-10-22',5, @i output
print @i
 
我看你可以写一个字定义函数来完成循环赋值
values(LocateID(P1,P2,P3...),dateadd(day,@i,@StartDateTime),'0')
其中LocateID(P1,P2,P3...)是自定义的函数,参数是用来确定在TbAuto中对应的Auto_Id
 
已经完成了,不过我测试时,datetime类型输入不对,数据类型转换也不对
declare @i nvarchar(20)
declare @t1 datetime
select @t1=CONVERT(datetime,'2002-10-24',110)
exec InitAutoState_Sp @t1,5, @i output
print @i
 
目前调试的代码如下:
CREATE procedure InitAutoState_Sp(
@StartDateTime datetime,
@DaysNumber int,
@return nvarchar(20) output
) as
declare @i int
set @i=0
while @i<=@DaysNumber
begin
insert into TbAutoState
select dateadd(day,@i,@StartDateTime),Auto_Id,'0' from TbAuto
set @i=@i+1
end
select @return='S_OK'
return
GO
 
解决了,'2002-10-24'是正确的。
自己解决,散分了。
 
多人接受答案了。
 
后退
顶部