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)