Bagikan melalui


Mengubah prosedur tersimpan

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Artikel ini menjelaskan cara mengubah prosedur tersimpan di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL.

Batasan

Prosedur tersimpan Transact-SQL tidak dapat dimodifikasi menjadi prosedur tersimpan CLR dan sebaliknya.

Jika definisi prosedur sebelumnya dibuat menggunakan WITH ENCRYPTION atau WITH RECOMPILE, opsi ini diaktifkan hanya jika disertakan dalam ALTER PROCEDURE pernyataan.

Izin

Memerlukan izin ALTER PROCEDURE pada prosedur.

Menggunakan SQL Server Management Studio

Untuk mengubah prosedur di SQL Server Management Studio:

  1. Di Object Explorer, sambungkan ke instans Mesin Database lalu perluas instans tersebut.

  2. Perluas Database, perluas database tempat prosedur berada, lalu perluas Programmability.

  3. Perluas Prosedur Tersimpan, klik kanan prosedur untuk mengubah, lalu pilih Ubah.

  4. Ubah teks prosedur tersimpan.

  5. Untuk menguji sintaks, pada menu Kueri , pilih Uraikan.

  6. Untuk menyimpan modifikasi ke definisi prosedur, pada menu Kueri , pilih Jalankan.

  7. Untuk menyimpan definisi prosedur yang diperbarui sebagai skrip Transact-SQL, pada menu File , pilih Simpan Sebagai. Terima nama file atau ganti dengan nama baru, lalu pilih Simpan.

Penting

Validasi semua input pengguna. Jangan menggabungkan input pengguna sebelum Anda memvalidasinya. Jangan pernah menjalankan perintah yang dibangun dari input pengguna yang tidak valid. Input pengguna yang tidak valid membuat database Anda rentan menjadi jenis eksploitasi yang disebut serangan injeksi SQL. Untuk informasi selengkapnya, lihat Injeksi SQL.

Menggunakan Transact-SQL

Untuk mengubah prosedur menggunakan perintah T-SQL:

  1. Di Object Explorer, sambungkan ke instans Mesin Database lalu perluas instans tersebut.

  2. Perluas Database, perluas database tempat prosedur berada. Atau, dari bilah alat, pilih database dari daftar database yang tersedia. Untuk contoh ini, pilih AdventureWorks2022 database.

  3. Pada menu File , pilih Kueri Baru.

  4. Salin dan tempel contoh berikut ke editor kueri. Contoh membuat Purchasing.uspVendorAllInfo prosedur, yang mengembalikan nama semua vendor dalam database Adventure Works Cycles, produk yang mereka berikan, peringkat kredit mereka, dan ketersediaannya.

    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. Pada menu File , pilih Kueri Baru.

  6. Salin dan tempel contoh berikut ke editor kueri. Contoh memodifikasi uspVendorAllInfo prosedur. Klausa EXECUTE AS CALLER dihapus dan isi prosedur dimodifikasi untuk mengembalikan hanya vendor yang menyediakan produk yang ditentukan. Fungsi LEFT dan CASE menyesuaikan tampilan kumpulan hasil.

    Penting

    Menghilangkan dan membuat ulang prosedur tersimpan yang ada akan menghapus izin yang telah diberikan secara eksplisit ke prosedur tersimpan. Gunakan ALTER untuk mengubah prosedur tersimpan yang ada sebagai gantinya.

    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. Untuk menyimpan modifikasi ke definisi prosedur, pada menu Kueri , pilih Jalankan.

  8. Untuk menyimpan definisi prosedur yang diperbarui sebagai skrip Transact-SQL, pada menu File , pilih Simpan Sebagai. Terima nama file atau ganti dengan nama baru, lalu pilih Simpan.

  9. Untuk menjalankan prosedur tersimpan yang dimodifikasi, jalankan contoh berikut.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO