Aracılığıyla paylaş


Bir saklı yordamı değiştir

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric'te SQL Veritabanı

Bu makalede, SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da saklı yordamın nasıl değiştirileceği açıklanır.

Sınırlama

Transact-SQL saklı yordamlar CLR saklı yordamları olacak şekilde değiştirilemez ve bunun tersi de geçerlidir.

Önceki yordam tanımı WITH ENCRYPTION veya WITH RECOMPILEkullanılarak oluşturulduysa, bu seçenekler yalnızca ALTER PROCEDURE deyimine dahil edildiyse etkinleştirilir.

İzinler

Yordamda ALTER PROCEDURE izni gerektirir.

SQL Server Management Studio kullanma

SQL Server Management Studio'da bir yordamı değiştirmek için:

  1. Nesne Gezgini'nde Veritabanı Altyapısı örneğine bağlanın ve ardından bu örneği genişletin.

  2. Önce yordamın ait olduğu veritabanını genişletin, sonra Veritabanlarıgenişletin ve ardından Programlanabilirlikgenişletin.

  3. Saklı Prosedürler'igenişletin, değiştireceğiniz prosedüre sağ tıklayın ve Değiştiröğesini seçin.

  4. Saklı yordamın metnini değiştirin.

  5. Söz dizimini test etmek için, Sorgu menüsünde Ayrıştıröğesini seçin.

  6. Yordam tanımında yapılan değişiklikleri kaydetmek için, Sorgu menüsünde Yürütöğesini seçin.

  7. Güncelleştirilmiş yordam tanımını Transact-SQL betik olarak kaydetmek için, Dosya menüsünde Farklı Kaydetseçin. Dosya adını kabul edin veya yeni bir adla değiştirin ve Kaydetöğesini seçin.

Önemli

Tüm kullanıcı girişlerini doğrulayın. Doğrulamadan önce kullanıcı girişini birleştirmeyin. Hiçbir zaman, karşılanmamış kullanıcı girişinden hazırlanmış bir komutu yürütmeyin. Doğrulanmamış kullanıcı girişi, veritabanınızı SQL ekleme saldırısıolarak adlandırılan bir tür istismara açık hale getirir. Daha fazla bilgi için bkz. SQL enjeksiyonu.

Transact-SQL kullanma

T-SQL komutlarını kullanarak bir yordamı değiştirmek için:

  1. Nesne Gezginiveritabanı altyapısının bir örneğine bağlanın ve bu örneği genişletin.

  2. veritabanları genişletin, yordamın ait olduğuveritabanını genişletin. Alternatif olarak, araç çubuğundan kullanılabilir veritabanları listesinden veritabanını seçin. Bu örnekte AdventureWorks2025 veritabanını seçin.

  3. Dosya menüsünde Yeni Sorguseçin.

  4. Aşağıdaki örneği kopyalayıp sorgu düzenleyicisine yapıştırın. Örnek, Adventure Works Cycles veritabanındaki tüm satıcıların adlarını, sağladığı ürünleri, kredi derecelendirmelerini ve kullanılabilirliklerini döndüren Purchasing.uspVendorAllInfo yordamını oluşturur.

    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   
    
  5. Dosya menüsünde Yeni Sorguseçin.

  6. Aşağıdaki örneği kopyalayıp sorgu düzenleyicisine yapıştırın. Örnek, uspVendorAllInfo prosedürünü değiştirir. EXECUTE AS CALLER yan tümcesi kaldırılır ve yordamın gövdesi yalnızca belirtilen ürünü sağlayan satıcıları döndürecek şekilde değiştirilir. LEFT ve CASE işlevleri sonuç kümesinin görünümünü özelleştirir.

    Önemli

    Mevcut bir saklı yordamın bırakılıp yeniden oluşturması, saklı yordama açıkça verilmiş izinleri kaldırır. Bunun yerine mevcut saklı yordamı değiştirmek için ALTER kullanın.

    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  
    
  7. Yordam tanımında yapılan değişiklikleri kaydetmek için, Sorgu menüsünde Yürütöğesini seçin.

  8. Güncelleştirilmiş yordam tanımını Transact-SQL betik olarak kaydetmek için, Dosya menüsünde Farklı Kaydetseçin. Dosya adını kabul edin veya yeni bir adla değiştirin ve Kaydetöğesini seçin.

  9. Değiştirilen saklı yordamı çalıştırmak için aşağıdaki örneği çalıştırın.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO