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.
Konvensi Sintaksis SQL Transact (SQL T-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 Azure SQL Database.
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 SQL bertransaksi 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 (SQL Bertransaksi)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
EXECUTE AS (T-SQL)
EVENTDATA (SQL Transaksi)
Prosedur Tersimpan (Mesin Database)
sys.procedures (Transact-SQL)