0

問題が発生している sybase ストアド プロシージャがあります。

ここで、挿入ステートメントを直接使用すると、挿入は次のように完全に機能します。

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
4

2 に答える 2

1

私は Sybase の専門家ではありませんが、確かに SQL Server では、最初に getdate() の戻り値を変数に格納する必要があります。

つまり、あなたはできません...

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

でも君ならできる

DECLARE @Now DATETIME
SET @Now = GETDATE()
EXEC MyProc @Now, @Now, @Now 
于 2013-04-25T13:27:07.267 に答える
1

ここでブレースを取り外して実行します

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

于 2013-04-25T16:01:41.193 に答える