存储过程问题

时间:2013-04-25 12:06:39

标签: sql stored-procedures sybase sybase-ase

我有一个存在问题的sybase存储过程。

这里如果我直接使用insert语句,插入工作就完美了 如图所示:

insert 
  into dbo.StudentData
     ( studID
     , studLetters
     , studCode 
     , studTelecast 
     , studName
     , monthCode
     , reportDate
     , startTime
     , endTime
     , startDateTime
     , endDateTime
     , cost
     , duration
     , creationTime
     )
values
     ( 113
     , 'ABCD'
     , 222
     , 333
     , 'One'
     , 02
     , getDate()
     , getdate()
     , getdate()
     , getdate()
     , getdate()
     , 999
     , 11
     , getdate()
     )
     ;

但如果我使用存储过程,我会收到以下错误:

[EXEC - 0 row(s), 0.000 secs]  [Error Code: 102, SQL State: 42000]  Incorrect syntax near ')'.

exec dbo.sp_loadStudData(113, 'ABCD', 222, 333, 'One', 02, getDate(), getdate(), getdate(), getdate(), getdate(), 999, 11, getdate() ) 

我无法找出问题所在,但存储过程已成功创建,没有任何错误。 存储的Proc如下:

create proc dbo.sp_loadStudData
(
@studID int,                   
@studLetters varchar(255),
@studCode int,
@studTelecast int,
@studName varchar(25),
@monthCode int,
@reportDate datetime,
@startTime datetime,
@endTime datetime,
@startDateTime datetime,
@endDateTime datetime,
@cost int,
@duration int,
@creationTime datetime
)
as
begin
set nocount on


insert into dbo.StudentData(studID,studLetters,studCode ,studTelecast ,studName ,monthCode,reportDate,startTime,endTime,startDateTime,endDateTime,cost,duration,creationTime)
values(@studID,@studLetters,@studCode ,@studTelecast ,@studName ,@monthCode,@reportDate,@startTime,@endTime,@startDateTime,@endDateTime,@cost,@duration,@creationTime)

end
go
EXEC sp_procxmode 'dbo.sp_loadStudData', 'unchained'
go
IF OBJECT_ID('dbo.sp_loadStudData') IS NOT NULL
    PRINT '<<< CREATED PROCEDURE dbo.sp_loadStudData >>>'
ELSE
    PRINT '<<< FAILED CREATING PROCEDURE dbo.sp_loadStudData >>>'
go
GRANT EXECUTE ON dbo.sp_loadStudData TO developers
go
GRANT EXECUTE ON dbo.sp_loadStudData TO web_group
go
GRANT EXECUTE ON dbo.sp_loadStudData TO crd_group
go
GRANT EXECUTE ON dbo.sp_loadStudData TO wd_group
go

2 个答案:

答案 0 :(得分:1)

我不是Sybase的专家,但在SQL Server中,您需要先将getdate()返回值存储在变量中。

即。你不能......

EXEC MyProc getdate(), getdate(), getdate()

但你可以

DECLARE @Now DATETIME
SET @Now = GETDATE()
EXEC MyProc @Now, @Now, @Now 

答案 1 :(得分:1)

在此处移除大括号并运行

exec dbo.sp_loadStudData 113,'ABCD',222,333,'One',02,getDate(),getdate(),getdate(),getdate(),999,11,getdate()