Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-database in Microsoft Fabric
In dit artikel wordt beschreven hoe u een opgeslagen procedure in SQL Server wijzigt met behulp van SQL Server Management Studio of Transact-SQL.
Beperkingen
Transact-SQL opgeslagen procedures kunnen niet worden gewijzigd in CLR-opgeslagen procedures en omgekeerd.
Als de vorige proceduredefinitie is gemaakt met WITH ENCRYPTION
of WITH RECOMPILE
, worden deze opties alleen ingeschakeld als ze zijn opgenomen in de ALTER PROCEDURE
-instructie.
Machtigingen
Vereist ALTER PROCEDURE-machtiging voor de procedure.
SQL Server Management Studio gebruiken
Een procedure wijzigen in SQL Server Management Studio:
Maak in Objectverkenner verbinding met een exemplaar van de Database Engine en vouw dat exemplaar vervolgens uit.
Vouw Databasesuit, vouw de database waartoe de procedure behoort uit en vouw vervolgens Programmeerbaarheiduit.
Vouw opgeslagen proceduresuit, klik met de rechtermuisknop op de procedure die u wilt wijzigen en selecteer Wijzigen.
Wijzig de tekst van de opgeslagen procedure.
Als u de syntaxis wilt testen, selecteer dan in het menu Query de optie Parseren.
Als u de wijzigingen in de proceduredefinitie wilt opslaan, selecteert u in het menu Queryuitvoeren.
Als u de bijgewerkte proceduredefinitie wilt opslaan als een Transact-SQL script, selecteert u in het menu BestandOpslaan als. Accepteer de bestandsnaam of vervang deze door een nieuwe naam en selecteer Opslaan.
Belangrijk
Valideer alle gebruikersinvoer. Voeg geen gebruikersinvoer samen voordat u deze valideert. Voer nooit een opdracht uit die is samengesteld op basis van niet-gevalideerde gebruikersinvoer. Niet-gevalideerde gebruikersinvoer maakt uw database kwetsbaar voor aanvallen die een SQL-injectieaanvalworden genoemd. Zie SQL-injectievoor meer informatie.
Gebruik Transact-SQL
Een procedure wijzigen met behulp van T-SQL-opdrachten:
Maak in Objectverkennerverbinding met een exemplaar van database-engine en vouw vervolgens dat exemplaar uit.
Vouw Databasesuit en vouw de database uit waartoe de procedure behoort. Of selecteer in de werkbalk de database in de lijst met beschikbare databases. Selecteer voor dit voorbeeld de
AdventureWorks2022
-database.Selecteer op het menu Bestand de optie Nieuwe query.
Kopieer en plak het volgende voorbeeld in de queryeditor. In het voorbeeld wordt de
Purchasing.uspVendorAllInfo
procedure gemaakt, die de namen retourneert van alle leveranciers in de database Adventure Works Cycles, de producten die ze leveren, hun kredietclassificaties en hun beschikbaarheid.CREATE PROCEDURE Purchasing.uspVendorAllInfo WITH EXECUTE AS CALLER AS SET NOCOUNT ON; SELECT v.Name AS Vendor, p.Name AS 'Product name', v.CreditRating AS 'Rating', v.ActiveFlag AS Availability FROM Purchasing.Vendor v INNER JOIN Purchasing.ProductVendor pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product p ON pv.ProductID = p.ProductID ORDER BY v.Name ASC; GO
Selecteer Nieuwe queryin het menu Bestand.
Kopieer en plak het volgende voorbeeld in de queryeditor. In het voorbeeld wordt de
uspVendorAllInfo
procedure gewijzigd. DeEXECUTE AS CALLER
component wordt verwijderd en de hoofdtekst van de procedure wordt gewijzigd om alleen leveranciers te retourneren die het opgegeven product leveren. De functiesLEFT
enCASE
passen het uiterlijk van de resultatenset aan.Belangrijk
Als u een bestaande opgeslagen procedure verwijdert en opnieuw maakt, worden machtigingen verwijderd die expliciet zijn verleend aan de opgeslagen procedure. Gebruik
ALTER
om in plaats daarvan de bestaande opgeslagen procedure te wijzigen.ALTER PROCEDURE Purchasing.uspVendorAllInfo @Product varchar(25) AS SET NOCOUNT ON; SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name', 'Rating' = CASE v.CreditRating WHEN 1 THEN 'Superior' WHEN 2 THEN 'Excellent' WHEN 3 THEN 'Above average' WHEN 4 THEN 'Average' WHEN 5 THEN 'Below average' ELSE 'No rating' END , Availability = CASE v.ActiveFlag WHEN 1 THEN 'Yes' ELSE 'No' END FROM Purchasing.Vendor AS v INNER JOIN Purchasing.ProductVendor AS pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE p.Name LIKE @Product ORDER BY v.Name ASC; GO
Als u de wijzigingen in de proceduredefinitie wilt opslaan, selecteert u in het menu Queryuitvoeren.
Als u de bijgewerkte proceduredefinitie wilt opslaan als een Transact-SQL script, selecteert u in het menu BestandOpslaan als. Accepteer de bestandsnaam of vervang deze door een nieuwe naam en selecteer Opslaan.
Voer het volgende voorbeeld uit om de gewijzigde opgeslagen procedure uit te voeren.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO