ALTER PROCEDURE (Transact-SQL)

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

Memodifikasi prosedur yang dibuat sebelumnya yang dibuat dengan menjalankan pernyataan CREATE PROCEDURE di SQL Server.

Ikon tautan topikKonvensi Sintaks Transact-SQL (Transact-SQL)

Sintaks

-- Syntax for SQL Server and Azure SQL Database
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]   
    [ { @parameter_name [ type_schema_name. ] data_type }   
        [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]  
    ] [ ,...n ]   
[ WITH <procedure_option> [ ,...n ] ]  
[ FOR REPLICATION ]   
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }  
[;]  
  
<procedure_option> ::=   
    [ ENCRYPTION ]  
    [ RECOMPILE ]  
    [ EXECUTE AS Clause ]  
-- Syntax for SQL Server CLR Stored Procedure  
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]   
    [ { @parameter_name [ type_schema_name. ] data_type }   
        [ = default ] [ OUT | OUTPUT ] [READONLY]  
    ] [ ,...n ]   
[ WITH EXECUTE AS Clause ]  
AS { EXTERNAL NAME assembly_name.class_name.method_name }  
[;]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name  
    [ { @parameterdata_type } [= ] ] [ ,...n ]  
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }  
[;]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

nama_skema
Nama skema tempat prosedur berada.

procedure_name
Nama prosedur yang akan diubah. Nama prosedur harus mematuhi aturan untuk pengidentifikasi.

;Nomor
Bilangan bulat opsional yang ada yang digunakan untuk mengelompokkan prosedur dengan nama yang sama sehingga dapat dihilangkan bersama dengan menggunakan satu pernyataan DROP PROCEDURE.

Catatan

Fitur ini akan dihapus dalam versi Microsoft SQL Server mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

@parameter_name
Parameter dalam prosedur. Hingga 2.100 parameter dapat ditentukan.

[ type_schema_name.data_type
Apakah jenis data parameter dan skema yang dimilikinya.

Untuk informasi tentang pembatasan jenis data, lihat CREATE PROCEDURE (Transact-SQL).

BERBAGAI
Menentukan kumpulan hasil yang didukung sebagai parameter output. Parameter ini dibangun secara dinamis oleh prosedur tersimpan dan isinya dapat bervariasi. Hanya berlaku untuk parameter kursor. Opsi ini tidak valid untuk prosedur CLR.

default
Adalah nilai default untuk parameter .

| OUT OUTPUT
Menunjukkan bahwa parameter adalah parameter pengembalian.

READONLY
Menunjukkan bahwa parameter tidak dapat diperbarui atau dimodifikasi dalam isi prosedur. Jika jenis parameter adalah jenis nilai tabel, READONLY harus ditentukan.

KOMPILASI ULANG
Menunjukkan bahwa Mesin Database tidak menyimpan rencana untuk prosedur ini dan prosedur dikompresi ulang pada durasi.

ENKRIPSI
Berlaku untuk: SQL Server ( SQL Server 2008 dan yang lebih baru) dan Database Azure SQL.

Menunjukkan bahwa Mesin Database akan mengonversi teks asli pernyataan ALTER PROCEDURE ke format yang dikaburkan. Output obfuscation tidak langsung terlihat dalam salah satu tampilan katalog di SQL Server. Pengguna yang tidak memiliki akses ke tabel sistem atau file database tidak dapat mengambil teks yang dikaburkan. Namun, teks akan tersedia untuk pengguna istimewa yang dapat mengakses tabel sistem melalui port DAC atau langsung mengakses file database. Selain itu, pengguna yang dapat melampirkan debugger ke proses server dapat mengambil prosedur asli dari memori saat runtime. Untuk informasi selengkapnya tentang mengakses metadata sistem, lihat Konfigurasi Visibilitas Metadata.

Prosedur yang dibuat dengan opsi ini tidak dapat diterbitkan sebagai bagian dari replikasi SQL Server.

Opsi ini tidak dapat ditentukan untuk prosedur tersimpan runtime bahasa umum (CLR).

Catatan

Selama peningkatan, Mesin Database menggunakan komentar yang dikaburkan yang disimpan dalam sys.sql_modules untuk membuat ulang prosedur.

JALANKAN SEBAGAI
Menentukan konteks keamanan untuk menjalankan prosedur tersimpan setelah diakses.

Untuk informasi selengkapnya, lihat KLAUSUL EXECUTE AS (Transact-SQL).

UNTUK REPLIKASI

Menentukan bahwa prosedur tersimpan yang dibuat untuk replikasi tidak dapat dijalankan pada Pelanggan. Prosedur tersimpan yang dibuat dengan opsi FOR REPLICATION digunakan sebagai filter prosedur tersimpan dan hanya dijalankan selama replikasi. Parameter tidak dapat dideklarasikan jika FOR REPLICATION ditentukan. Opsi ini tidak valid untuk prosedur CLR. Opsi RECOMPILE diabaikan untuk prosedur yang dibuat dengan FOR REPLICATION.

Catatan

Opsi ini tidak tersedia dalam database mandiri.

{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Satu atau beberapa pernyataan Transact-SQL yang terdiri dari isi prosedur. Anda dapat menggunakan kata kunci BEGIN dan END opsional untuk mengapit pernyataan. Untuk informasi selengkapnya, lihat bagian Praktik Terbaik, Keterangan Umum, dan Batasan dan Pembatasan di CREATE PROCEDURE (Transact-SQL).

ASSEMBLY_NAME NAMA EKSTERNAL.class_name.method_name
Berlaku untuk: SQL Server 2008 dan yang lebih baru.

Menentukan metode perakitan .NET Framework untuk prosedur tersimpan CLR ke referensi. class_name harus berupa pengidentifikasi SQL Server yang valid dan harus ada sebagai kelas di perakitan. Jika kelas memiliki nama yang memenuhi syarat namespace menggunakan titik (.) untuk memisahkan bagian namespace, nama kelas harus dibatasi dengan menggunakan tanda kurung ([]) atau tanda kutip (""). Metode yang ditentukan harus merupakan metode statis dari kelas .

Secara default, SQL Server tidak dapat menjalankan kode CLR. Anda dapat membuat, memodifikasi, dan menghilangkan objek database yang mereferensikan modul runtime bahasa umum; namun, Anda tidak dapat menjalankan referensi ini di SQL Server sampai Anda mengaktifkan opsi clr yang diaktifkan. Untuk mengaktifkan opsi , gunakan sp_configure.

Catatan

Prosedur CLR tidak didukung dalam database mandiri.

Keterangan Umum

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

ALTER PROCEDURE tidak mengubah izin dan tidak memengaruhi prosedur atau pemicu tersimpan dependen apa pun. Namun, pengaturan sesi saat ini untuk QUOTED_IDENTIFIER dan ANSI_NULLS disertakan dalam prosedur tersimpan saat dimodifikasi. Jika pengaturan berbeda dari yang berlaku ketika prosedur tersimpan awalnya dibuat, perilaku prosedur tersimpan dapat berubah.

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

Untuk informasi selengkapnya tentang prosedur tersimpan, lihat CREATE PROCEDURE (Transact-SQL).

Keamanan

Izin

Memerlukan izin UBAH pada prosedur atau memerlukan keanggotaan dalam peran database tetap db_ddladmin .

Contoh

Contoh berikut membuat prosedur tersimpan uspVendorAllInfo . Prosedur ini mengembalikan nama semua vendor yang menyediakan Adventure Works Cycles, produk yang mereka berikan, peringkat kredit mereka, dan ketersediaannya. Setelah prosedur ini dibuat, kemudian dimodifikasi untuk mengembalikan tataan hasil yang berbeda.

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    

Contoh berikut mengubah prosedur tersimpan uspVendorAllInfo . Ini menghapus klausa EXECUTE AS CALLER dan memodifikasi isi prosedur untuk mengembalikan hanya vendor yang menyediakan produk yang ditentukan. Fungsi LEFT dan CASE menyesuaikan tampilan kumpulan hasil.

USE AdventureWorks2012;  
GO  
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  

Berikut adalah hasil yang ditetapkan.

Vendor               Product name  Rating    Availability  
-------------------- ------------- -------   ------------  
Proseware, Inc.      LL Crankarm   Average   No  
Vision Cycles, Inc.  LL Crankarm   Superior  Yes  
(2 row(s) affected)`  

Lihat juga

CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
EXECUTE AS (T-SQL)
EVENTDATA (Transact-SQL)
Prosedur Tersimpan (Mesin Database)
sys.procedures (Transact-SQL)