Jak wykonać procedurę składowaną SQL Server w SQL Developer?

148

Otrzymałem konto użytkownika w bazie danych SQL Server, które ma uprawnienia tylko do wykonywania procedury składowanej. Dodałem plik jar JTDS SQL Server JDBC do programu SQL Developer i dodałem go jako sterownik JDBC innej firmy. Mogę pomyślnie zalogować się do bazy danych SQL Server. Otrzymałem następującą składnię do uruchomienia procedury:

EXEC proc_name 'paramValue1' 'paramValue2'

Kiedy uruchamiam to jako instrukcję lub skrypt, pojawia się ten błąd:

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

Próbowałem zawinąć instrukcję BEGIN/END, ale otrzymałem ten sam błąd. Czy można wywołać procedurę z poziomu SQL Developer? Jeśli tak, jakiej składni potrzebuję?

sdoca
źródło

Odpowiedzi:

231

Nie potrzebujesz klauzuli EXEC. Po prostu użyj

proc_name paramValue1, paramValue2

(i potrzebujesz przecinków, jak wspomniano Misnomer)

Tema
źródło
8
Czy są jakieś wyjątki od tej reguły? Wygląda na to, że pojawia się błąd „Nieprawidłowa składnia w pobliżu„ sp_dev_mystoredproc ””. podczas wykonywania z tą składnią.
nuzzolilo
2
EXEC wcześniejsza nazwa proc_name jest wymagana w moim przypadku
César León
3
Gorąco polecam odwiedzić link zasugerowany przez @MuriloKunze. Bardzo ważne, aby wiedzieć.
RBT
@RBT kto jest linkiem gdzie?
CervEd
72

Brakuje ,

EXEC proc_name 'paramValue1','paramValue2'
Vishal
źródło
1
Dodałem brakujący przecinek, ale znowu pojawia się ten sam błąd.
sdoca
Jakie są twoje parametry, jeśli są varchar, to tylko ty potrzebujesz cudzysłowów ... poza tym nie możesz nic wymyślić ... możesz spróbować po prostu uruchomić tylko to w nowym oknie - EXEC proc_namei zobaczyć, czy prosi cię o drugi parametr ... to przynajmniej wiesz, że twój sytax jest poprawny ... jeśli nie działa, oznacza to, że prawdopodobnie nie masz poprawnie zapisanej nazwy proc ... spróbuj pełnej kwalifikowanej nazwy ..
Vishal
Usunąłem drugi parametr i nadal ten sam błąd. Nie sądzę, żeby to w ogóle działała procedura. Składnia polecenia EXEC nie jest podświetlona, ​​więc domyślam się, że programista go nie rozpoznaje, mimo że połączenie jest z bazą danych SQL Server. Ale nie mogę znaleźć niczego w sieci, aby to potwierdzić / zaprzeczyć.
sdoca
Tak ... spróbuj wybrać jakieś rekordy i wykonać kilka prostych poleceń, sprawdź, czy coś w ogóle działa! .. powodzenia ..
Vishal
Niestety, mój użytkownik ma uprawnienia tylko do uruchamiania procedury składowanej.
sdoca
18

Musisz to zrobić:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Daniel
źródło
4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Prasanna Gulhane
źródło
0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Jeśli celem procedury składowanej jest wykonanie operacji INSERTna tabeli, która ma zadeklarowane pole Identity, to pole w tym scenariuszu @paramValue1powinno zostać zadeklarowane i po prostu przekazać wartość 0, ponieważ będzie to automatycznie zwiększane.

chri3g91
źródło
0

Wiem, że to stary. Ale to może pomóc innym.

Dodałem funkcję wywołującą SP między BEGIN / END. Oto działający skrypt.

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 
Roshan Perera
źródło
-3

Jeśli chcesz po prostu wykonać procedurę składowaną proc_name 'paramValue1' , 'paramValue2'... w tym samym czasie, gdy wykonujesz więcej niż jedno zapytanie, takie jak jedno zapytanie wybierające i procedura składowana, musisz dodać select * from tableName EXEC proc_name paramValue1 , paramValue2...

Joel Prabhu
źródło
-8

Procedury składowane można uruchomić w narzędziu deweloperskim sql przy użyciu poniższej składni

BEGIN nazwa procedury (); KONIEC;

Jeśli są jakieś parametry, należy je przekazać.

Santhosh
źródło
Dlaczego umieszczasz pojedynczą instrukcję w bloku instrukcji? Musisz to zrobić tylko dla serii instrukcji T-SQL .
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.
user3110888
źródło
1
Witamy w stackoverflow. Weź udział w tej wycieczce, aby dowiedzieć się, jak działa ta witryna i do czego służy. Jaka jest twoja odpowiedź?
Devraj Gadhavi