Bagikan melalui


ALTER PROCEDURE (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

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

Konvensi 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 and Microsoft Fabric
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name  
    [ { @parameterdata_type } [= ] ] [ ,...n ]  
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }  
[;]  

Argumen

schema_name
Nama skema tempat prosedur berada.

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

; angka
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 SQL Server yang akan datang. 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
Adalah jenis data parameter dan skema miliknya.

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 kontennya dapat bervariasi. Hanya berlaku untuk parameter kursor. Opsi ini tidak valid untuk prosedur CLR.

Default
Adalah nilai default untuk parameter .

OUT | HASIL
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 paket untuk prosedur ini dan prosedur dikompresi ulang pada waktu proses.

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

Menunjukkan bahwa Mesin Database akan mengonversi teks asli pernyataan ALTER PROCEDURE ke format yang dikaburkan. Output obfuscation tidak langsung terlihat di 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 common language runtime (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 EXECUTE AS Clause (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 UNTUK REPLIKASI 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 (10.0.x) dan yang lebih baru.

Menentukan metode rakitan .NET Framework untuk prosedur tersimpan CLR ke referensi. class_name harus berupa pengidentifikasi SQL Server yang valid dan harus ada sebagai kelas di rakitan. 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 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 ALTER 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 klausul 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 AdventureWorks2022;  
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 set hasilnya.

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)