Udostępnij za pośrednictwem


Wykonaj procedurę składowaną

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

W tym artykule opisano sposób wykonywania procedury składowanej w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL.

Istnieją różne sposoby wykonywania przechowywanej procedury. Pierwszą i najbardziej typową metodą jest wywołanie procedury przez aplikację lub użytkownika. Innym podejściem jest ustawienie procedury składowanej do automatycznego uruchamiania po uruchomieniu wystąpienia programu SQL Server.

Gdy procedura jest wywoływana przez aplikację lub użytkownika, słowo kluczowe EXECUTE lub EXEC Transact-SQL jest jawnie określone w wywołaniu. Procedurę można wywołać i wykonać bez użycia słowa kluczowego EXEC, jeśli procedura jest pierwszą instrukcją w partii kodu Transact-SQL.

Ograniczenia i ograniczenia

Sortowanie wywołującej bazy danych jest używane podczas dopasowywania nazw procedur systemowych. Z tego powodu zawsze należy używać dokładnej pisowni nazw procedur systemowych w wywołaniach procedur. Na przykład ten kod kończy się niepowodzeniem w przypadku wykonania w kontekście bazy danych, która ma sortowanie z uwzględnieniem wielkości liter:

EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help  

Aby wyświetlić dokładne nazwy procedur systemowych, wykonaj zapytanie dotyczące widoków wykazu sys.system_objects i sys.system_parameters.

Jeśli procedura zdefiniowana przez użytkownika ma taką samą nazwę jak procedura systemowa, procedura zdefiniowana przez użytkownika może nigdy nie zostać wykonana.

Zalecenia

Skorzystaj z poniższych zaleceń dotyczących wykonywania procedur składowanych.

Procedury systemowe składowane

Procedury systemowe zaczynają się od prefiksu sp_. Ponieważ są one logicznie wyświetlane we wszystkich bazach danych zdefiniowanych przez użytkownika i system, procedury systemowe można wykonać z dowolnej bazy danych bez konieczności pełnego kwalifikowania nazwy procedury. Jednak najlepiej jest kwalifikować wszystkie nazwy procedur systemowych za pomocą nazwy schematu sys, aby zapobiec konfliktom nazw. Poniższy przykład przedstawia zalecaną metodę wywoływania procedury systemowej.

EXEC sys.sp_who;  

Procedury składowane definiowane przez użytkownika

Podczas wykonywania procedury zdefiniowanej przez użytkownika najlepiej jest zakwalifikować nazwę procedury przy użyciu nazwy schematu. Ta praktyka zwiększa wydajność, ponieważ aparat bazy danych nie musi przeszukiwać wielu schematów. Użycie nazwy schematu uniemożliwia również wykonanie niewłaściwej procedury, jeśli baza danych ma procedury o tej samej nazwie w wielu schematach.

W poniższych przykładach pokazano zalecaną metodę wykonywania procedury zdefiniowanej przez użytkownika. Ta procedura akceptuje dwa parametry wejściowe. Aby uzyskać informacje na temat określania parametrów wejściowych i wyjściowych, zobacz Określanie parametrów w procedurze składowanej.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

Lub:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

Jeśli określono niekwalifikowaną procedurę zdefiniowaną przez użytkownika, aparat bazy danych wyszukuje procedurę w następującej kolejności:

  1. Schemat sys bieżącej bazy danych.

  2. Domyślny schemat elementu wywołującego, jeśli procedura jest wykonywana w partii lub w dynamicznym języku SQL. Jeśli niekwalifikowana nazwa procedury pojawi się wewnątrz treści innej definicji procedury, schemat zawierający tę inną procedurę zostanie przeszukany w następnej kolejności.

  3. Schemat dbo w bieżącej bazie danych.

Bezpieczeństwo

Aby uzyskać informacje o zabezpieczeniach, zobacz EXECUTE AS (Transact-SQL) i EXECUTE AS Clause (Transact-SQL).

Uprawnienia

Aby uzyskać informacje o uprawnieniach, zajrzyj do sekcji Uprawnienia w EXECUTE (Transact-SQL).

Wykonywanie procedury składowanej

Do wykonania procedury składowanej można użyć programu SQL Server Management Studio (SSMS) interfejsu użytkownika lub Transact-SQL w oknie zapytania programu SSMS. Zawsze używaj najnowszej wersji programu SSMS.

Korzystanie z programu SQL Server Management Studio

  1. W Eksploratorze Obiektów nawiąż połączenie z wystąpieniem programu SQL Server lub usługi Azure SQL Database, rozwiń to wystąpienie, a następnie rozwiń bazy danych.

  2. Rozwiń odpowiednią bazę danych, rozwiń Programmability, a następnie rozwiń Procedury składowane.

  3. Kliknij prawym przyciskiem myszy procedurę składowaną, którą chcesz uruchomić, a następnie wybierz Wykonaj procedurę składowaną.

  4. W oknie dialogowym Wykonywanie procedury, Parametr określa nazwę poszczególnych parametrów, Typ danych określa jego typ danych, a Parametr wyjściowy wskazuje, czy jest to parametr wyjściowy.

    Dla każdego parametru:

    • W obszarze Wartośćwpisz wartość, która ma być używana dla parametru .
    • Pod Przekaż wartość NULLwybierz, czy przekazać NULL jako parametr.
  5. Wybierz OK, aby wykonać procedurę składowaną. Jeśli procedura składowana nie ma żadnych parametrów, wybierz OK.

    Procedura składowana uruchamia się, a wyniki pojawiają się w okienku wyników.

    Aby na przykład uruchomić procedurę składowaną SalesLT.uspGetCustomerCompany z artykułu Tworzenie procedury składowanej, wprowadź Cannon dla parametru @LastName i Chris dla parametru @FirstName, a następnie naciśnij OK. Procedura zwraca FirstNameChris, LastNameCannoni CompanyNameOutdoor Sporting Goods.

Użyj Transact-SQL w oknie zapytania

  1. W SSMS nawiąż połączenie z instancją SQL Server lub Azure SQL Database.

  2. Na pasku narzędzi wybierz pozycję Nowe zapytanie.

  3. Wprowadź instrukcję EXECUTE z następującą składnią w oknie zapytania, podając wartości dla wszystkich oczekiwanych parametrów:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Na przykład następująca instrukcja Transact-SQL wykonuje procedurę składowaną uspGetCustomerCompany, gdzie Cannon to wartość parametru @LastName, a Chris to wartość parametru @FirstName.

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Wybierz z paska narzędzi polecenie Wykonaj. Procedura składowana uruchamia się.

Opcje wartości parametrów

Istnieje wiele sposobów podawania parametrów i wartości w instrukcjach EXECUTE procedury składowanej. W poniższych przykładach przedstawiono kilka różnych opcji instrukcji EXECUTE.

  • Jeśli podasz wartości parametrów w tej samej kolejności, w której są zdefiniowane w procedurze składowanej, nie musisz określać nazw parametrów. Na przykład:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • W przypadku podania nazw parametrów we wzorcu @parameter_name=value nie trzeba określać nazw parametrów i wartości w tej samej kolejności, w której są zdefiniowane. Na przykład, któraś z następujących instrukcji jest prawidłowa:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    lub:

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Jeśli używasz formularza @parameter_name=value dla dowolnego parametru, musisz użyć go dla wszystkich kolejnych parametrów w tej instrukcji. Na przykład nie można użyć EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.

Automatyczne wykonywanie podczas uruchamiania

Dotyczy: SQL Server

W programie SQL Server członek roli serwera sysadmin może użyć sp_procoption do ustawienia lub wyczyszczenia procedury automatycznego wykonywania podczas uruchamiania. Procedury uruchamiania muszą znajdować się w bazie danych master, muszą być własnością sai nie mogą mieć parametrów wejściowych ani wyjściowych. Aby uzyskać więcej informacji, zobacz sp_procoption (Transact-SQL).

Procedury oznaczone do automatycznego wykonywania podczas uruchamiania są wykonywane za każdym razem, gdy program SQL Server jest uruchamiany, a baza danych master jest odzyskiwane podczas tego procesu uruchamiania. Konfigurowanie procedur do automatycznego wykonywania może być przydatne do wykonywania operacji konserwacji bazy danych lub wykonywania procedur w sposób ciągły jako procesy w tle.

Innym zastosowaniem do automatycznego wykonywania jest wykonanie procedury wykonywania zadań systemowych lub konserwacyjnych w tempdb, takich jak tworzenie globalnej tabeli tymczasowej. Automatyczne wykonywanie gwarantuje, że taka tabela tymczasowa zawsze istnieje po ponownym utworzeniu tempdb podczas uruchamiania programu SQL Server.

Procedura wykonywana automatycznie działa z tymi samymi uprawnieniami co członkowie stałej roli serwera sysadmin. Wszelkie komunikaty o błędach generowane przez procedurę są zapisywane w logu błędów SQL Server.

Nie ma limitu liczby procedur uruchamiania, które można mieć, ale każda procedura uruchamiania zużywa jeden wątek procesu roboczego podczas wykonywania. Jeśli musisz wykonać wiele procedur podczas uruchamiania, ale nie musisz ich wykonywać równolegle, wyznacz jedną procedurę jako procedurę uruchamiającą i spraw, aby ta procedura wywoływała pozostałe procedury. Ta metoda używa tylko jednego wątku roboczego.

Napiwek

Nie zwracaj żadnych zestawów wyników z procedury, która jest wykonywana automatycznie. Ponieważ procedura jest wykonywana przez SQL Server zamiast przez aplikację lub użytkownika, zestawy wyników nie mają gdzie zostać przesłane.

Notatka

Usługa Azure SQL Database została zaprojektowana tak, aby odizolować funkcje od zależności od bazy danych master. W związku z tym instrukcje Transact-SQL, które konfigurują opcje na poziomie serwera, nie są dostępne w usłudze Azure SQL. Często można znaleźć odpowiednie alternatywy dla innych usług platformy Azure, takich jak zadania elastyczne lub Azure Automation.

Ustawianie procedury do wykonania automatycznie podczas uruchamiania

Tylko administrator systemu (sa) może oznaczyć procedurę do wykonania automatycznie.

  1. W programie SSMS nawiąż połączenie do silnika bazy danych.

  2. Na pasku narzędzi w warstwie Standardowa wybierz pozycję Nowe zapytanie.

  3. Wprowadź następujące polecenia sp_procoption, aby ustawić procedurę składowaną do automatycznego wykonywania podczas uruchamiania programu SQL Server.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. Na pasku narzędzi wybierz pozycję Wykonaj.

Zatrzymaj wykonywanie procedury automatycznie podczas uruchamiania

sysadmin może użyć sp_procoption, aby zapobiec automatycznemu wykonywaniu procedury podczas uruchamiania SQL Server.

  1. W programie SSMS nawiąż połączenie z silnikiem bazy danych.

  2. Na pasku narzędzi Standardowym wybierz Nowe zapytanie.

  3. Wprowadź następujące polecenia w oknie zapytania.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Na pasku narzędzi wybierz pozycję Wykonaj.