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ę?

Odpowiedzi:


231

Nie potrzebujesz klauzuli EXEC. Po prostu użyj

proc_name paramValue1, paramValue2

(i potrzebujesz przecinków, jak wspomniano Misnomer)


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'

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'

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

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.


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 

-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...


-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ć.


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.

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.