ストアドプロシージャを実行する権限のみを持つSQL Serverデータベースへのユーザーアカウントが与えられました。私はJTDS SQL Server JDBC jarファイルをSQL Developerに追加し、それをサードパーティーJDBCドライバーとして追加しました。 SQL Serverデータベースに正常にログインできます。プロシージャを実行するために私はこの構文を与えられました:
EXEC proc_name 'paramValue1' 'paramValue2'
これをステートメントまたはスクリプトとして実行すると、次のエラーが発生します。
Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.
ステートメントをBEGIN/END
でラップしようとしましたが、同じエラーが発生しました。 SQL Developerからプロシージャを呼び出すことは可能ですか?もしそうなら、私はどのような構文を使用する必要がありますか?
EXEC句は必要ありません。単に使う
proc_name paramValue1, paramValue2
(そして、あなたはミスノマーが述べたようにあなたはコンマを必要とします)
,
が見つかりません
EXEC proc_name 'paramValue1','paramValue2'
これをする必要があります:
exec procName
@parameter_1_Name = 'parameter_1_Value',
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
EXECUTE [or EXEC] procedure_name
@parameter_1_Name = 'parameter_1_Value',
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO
ストアドプロシージャの目的が、Identityフィールドが宣言されているテーブルでINSERT
を実行することである場合、このシナリオでは@paramValue1
フィールドを宣言し、値0を渡すだけです。自動インクリメントである。
これは古いものです。しかし、これは他人を助けるかもしれません。
BEGIN/END間にSP呼び出し関数を追加しました。これが実用的なスクリプトです。
ALTER Proc [dbo].[DepartmentAddOrEdit]
@Id int,
@Code varchar(100),
@Name varchar(100),
@IsActive bit ,
@LocationId int,
@CreatedBy int,
@UpdatedBy int
AS
IF(@Id = 0)
BEGIN
INSERT INTO Department (Code,Name,IsActive,LocationId,CreatedBy,UpdatedBy,CreatedAt)
VALUES(@Code,@Name,@IsActive,@LocationId,@CreatedBy,@UpdatedBy,CURRENT_TIMESTAMP)
EXEC dbo.LogAdd @CreatedBy,'DEPARTMENT',@Name
END
ELSE
UPDATE Department SET
Code = @Code,
Name = @Name,
IsActive = @IsActive,
LocationId = @LocationId,
CreatedBy = @CreatedBy,
UpdatedBy = @UpdatedBy,
UpdatedAt = CURRENT_TIMESTAMP
where Id = @Id