Modificar un procedimiento almacenado
Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
En este artículo se describe cómo modificar un procedimiento almacenado en SQL Server con SQL Server Management Studio o Transact-SQL.
Limitaciones y restricciones
Transact-SQL no se pueden modificar para que sean procedimientos almacenados CLR y viceversa.
Si anteriormente se creó la definición de procedimiento mediante WITH ENCRYPTION o WITH RECOMPILE, estas opciones solo se habilitan si se incluyen en la instrucción ALTER PROCEDURE.
Permisos
Es necesario el permiso ALTER PROCEDURE en el procedimiento.
Usar SQL Server Management Studio
Para modificar un procedimiento en SQL Server Management Studio:
En el Explorador de objetos, conéctese a una instancia de Motor de base de datos y expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento y, a continuación, expanda Programación.
Expanda Procedimientos almacenados, haga clic con el botón derecho en el procedimiento que quiere modificar y luego seleccione Modificar.
Modifique el texto del procedimiento almacenado.
Para probar la sintaxis, seleccione Analizar en el menú Consulta.
Para guardar las modificaciones en la definición de procedimiento, seleccione Ejecutar en el menú Consulta.
Para guardar la definición de procedimiento actualizada como un script de Transact-SQL, seleccione Guardar como en el menú Archivo. Acepte el nombre de archivo o reemplácelo por uno nuevo y, después, seleccione Guardar.
Importante
Valide todos los datos proporcionados por el usuario. No concatene ninguna entrada de usuario antes de validarla. No ejecute nunca un comando creado a partir de una entrada de usuario no validada. Para más información, vea Inyección de código SQL.
Uso de Transact-SQL
Para modificar un procedimiento mediante comandos de T-SQL:
En el Explorador de objetos, conéctese a una instancia del Motor de base de datos y expándala.
Expanda Bases de datos, expanda la base de datos a la que pertenece el procedimiento. O bien, en la barra de herramientas, seleccione la base de datos en la lista de bases de datos disponibles. En este ejemplo, seleccione la base de datos
AdventureWorks2022
.En el menú Archivo, seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en el editor de consultas. El ejemplo crea el procedimiento
uspVendorAllInfo
, que devuelve los nombres de todos los proveedores en la base de datos Adventure Works Cycles , los productos que suministran, su solvencia y su disponibilidad.IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL DROP PROCEDURE Purchasing.uspVendorAllInfo; GO 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
Importante
Al quitar y volver a crear un procedimiento almacenado existente, se quitan los permisos que se han concedido explícitamente al procedimiento almacenado. Use ALTER en su lugar.
En el menú Archivo, seleccione Nueva consulta.
Copie y pegue el ejemplo siguiente en el editor de consultas. El ejemplo modifica el procedimiento
uspVendorAllInfo
. La cláusulaEXECUTE AS CALLER
se quita y el cuerpo del procedimiento se modifica para devolver solo los proveedores que proporcionan el producto especificado. Las funcionesLEFT
yCASE
permiten personalizar la apariencia del conjunto de resultados.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
Para guardar las modificaciones en la definición de procedimiento, seleccione Ejecutar en el menú Consulta.
Para guardar la definición de procedimiento actualizada como un script de Transact-SQL, seleccione Guardar como en el menú Archivo. Acepte el nombre de archivo o reemplácelo por uno nuevo y, después, seleccione Guardar.
Para ejecutar el procedimiento almacenado modificado, ejecute el siguiente ejemplo.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO
Pasos siguientes
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de