Bagaimana cara menjalankan prosedur yang disimpan SQL Server di SQL Developer?


148

Saya telah diberikan akun pengguna ke database SQL Server yang hanya memiliki hak istimewa untuk menjalankan prosedur tersimpan. Saya menambahkan file jar JTDS SQL Server JDBC ke SQL Developer dan menambahkannya sebagai driver JDBC Pihak Ketiga. Saya berhasil masuk ke database SQL Server. Saya diberikan sintaks ini untuk menjalankan prosedur:

EXEC proc_name 'paramValue1' 'paramValue2'

Ketika saya menjalankan ini sebagai pernyataan atau skrip, saya mendapatkan kesalahan ini:

Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.

Saya mencoba membungkus pernyataan itu BEGIN/END, tetapi mendapatkan kesalahan yang sama. Apakah mungkin untuk memanggil prosedur dari Pengembang SQL? Jika demikian, sintaks apa yang harus saya gunakan?

Jawaban:


231

Anda tidak perlu klausa EXEC. Cukup gunakan

proc_name paramValue1, paramValue2

(dan Anda perlu koma seperti yang disebutkan Misnomer)


8
Apakah ada pengecualian untuk aturan ini? Saya tampaknya mendapatkan kesalahan "Sintaks salah dekat 'sp_dev_mystoredproc'." saat mengeksekusi dengan sintaks ini.
nuzzolilo

2
EXEC sebelum proc_name diperlukan dalam kasus saya
César León

3
Saya sangat merekomendasikan mengunjungi tautan yang disarankan oleh @MuriloKunze. Sangat penting untuk diketahui.
RBT

@RBT siapa tautan di mana?
CervEd

72

Kamu hilang ,

EXEC proc_name 'paramValue1','paramValue2'

1
Saya menambahkan koma yang hilang, tetapi sekali lagi, masih mendapatkan kesalahan yang sama.
sdoca

Apa parameter Anda jika mereka varchar maka hanya Anda yang perlu tanda kutip ... selain itu tidak dapat memikirkan apa pun ... Anda bisa mencoba ini jalankan saja ini di windows baru- EXEC proc_namedan lihat apakah itu meminta Anda untuk parameter kedua ... maka setidaknya Anda tahu sytax Anda benar..jika tidak berhasil berarti Anda benar-benar tidak punya nama proc yang tersimpan dengan benar ... coba nama yang memenuhi syarat penuh ..
Vishal

Saya menghapus paramater kedua dan masih kesalahan yang sama. Saya tidak berpikir itu menjalankan prosedur sama sekali. Perintah EXEC tidak disorot sintaks, jadi saya kira Pengembang tidak mengenalinya meskipun koneksi ke database SQL Server. Tetapi saya tidak dapat menemukan apa pun di web untuk mengonfirmasi / menyangkal hal itu.
sdoca

Ya..mencoba memilih beberapa catatan dan menjalankan beberapa perintah sederhana untuk melihat apakah semuanya berhasil! .. semoga berhasil ..
Vishal

Sayangnya, pengguna saya hanya memiliki hak istimewa untuk menjalankan prosedur tersimpan.
sdoca

19

Anda perlu melakukan ini:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Jika tujuan Prosedur Tersimpan adalah untuk melakukan INSERTpada tabel yang memiliki bidang Identitas dideklarasikan, maka bidang, dalam skenario ini @paramValue1, harus dideklarasikan dan hanya melewati nilai 0, karena itu akan menjadi peningkatan otomatis.


0

Saya tahu ini yang lama. Tetapi ini dapat membantu orang lain.

Saya telah menambahkan fungsi panggilan SP antara BEGIN / END. Berikut ini skrip yang berfungsi.

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 

-3

Jika Anda hanya perlu keluar dari prosedur tersimpan Anda proc_name 'paramValue1' , 'paramValue2'... pada saat yang sama Anda menjalankan lebih dari satu permintaan seperti satu permintaan pilih dan prosedur tersimpan Anda harus menambahkan select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

Prosedur yang tersimpan dapat dijalankan dalam alat pengembang sql menggunakan sintaks di bawah ini

BEGIN procedureurameame (); AKHIR;

Jika ada parameter maka harus dilewati.


Mengapa Anda melampirkan satu pernyataan dengan blok pernyataan? Anda harus melakukannya untuk serangkaian pernyataan T-SQL saja.
David Ferenczy Rogožan

-11
Select * from Table name ..i.e(are you save table name in sql(TEST) k.

Select * from TEST then you will execute your project.

1
Selamat datang di stackoverflow. Ikuti tur ini untuk mengetahui cara kerja situs ini dan untuk apa itu. Apa jawabanmu?
Devraj Gadhavi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.