Aracılığıyla paylaş


DEĞIŞEN PROSEDÜR (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL Server'da CREATE PROCEDURE ifadesi çalıştırılarak oluşturulmuş daha önce oluşturulmuş bir prosedürü değiştirir.

Transact-SQL Sözdizimi Kuralları (Transact-SQL)

Sözdizimi

-- 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 ] }  
[;]  

Arguments

schema_name
Yordamın ait olduğu şemanın adı.

procedure_name
Değiştirilecek prosedürün adı. Prosedür adları tanımlayıcılar için kurallara uymalıdır.

;sayı
Aynı isimdeki prosedürleri gruplamak için kullanılan mevcut isteğe bağlı bir tam sayı, böylece bir DROP PROCEDURE ifadesi kullanılarak bir araya getirilebilir.

Uyarı

Bu özellik, SQL Server'ın gelecek bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

@ parameter_name
Prosedürde bir parametre. En fazla 2.100 parametre belirtilebilir.

[ type_schema_name. ] data_type
Parametrenin veri tipi ve ait olduğu şemadır.

Veri türü kısıtlamaları hakkında bilgi için bkz. OLUŞTUR PROSEDÜRÜ (Transact-SQL).

DEĞİŞEN
Çıkış parametresi olarak desteklenen sonuç kümesini belirtir. Bu parametre, saklanan prosedür tarafından dinamik olarak oluşturulur ve içeriği değişkenlik gösterebilir. Sadece imleç parametreleri için geçerlidir. Bu seçenek CLR prosedürleri için geçerli değildir.

varsayılan
Parametre için varsayılan bir değerdir.

OUT | ÇIKTI
Parametrenin dönüş parametresi olduğunu gösterir.

SALT OKUNUR
Parametrenin prosedürün gövdesi içinde güncellenemeyeceğini veya değiştirilemeyeceğini gösterir. Parametre türü bir tablo-değer türüyse READONLY belirtilmelidir.

RECOMPILE
Veritabanı Motoru'nun bu prosedür için bir plan önbellemediğini ve prosedürün çalışma zamanında yeniden derlendiğini gösterir.

ŞİFRELEME
Şunlar için geçerlidir: SQL Server (SQL Server 2008 (10.0.x) ve sonrası) ve Azure SQL Veritabanı.

Veritabanı Motoru'nun ALTER PROCEDURE ifadesinin orijinal metnini gizlenmiş bir formata dönüştüreceğini gösterir. Gizlemenin çıktısı, SQL Server'daki katalog görünümlerinin hiçbirinde doğrudan görünmez. Sistem tablolarına veya veritabanı dosyalarına erişimi olmayan kullanıcılar, gizlenmiş metni geri alamaz. Ancak, metin, DAC portu üzerinden sistem tablolarına erişebilecek veya veritabanı dosyalarına doğrudan erişebilecek ayrıcalıklı kullanıcılar için erişilebilir olacaktır. Ayrıca, sunucu sürecine hata ayıklayıcı bağlayabilen kullanıcılar, çalışma zamanında orijinal prosedürü bellekten geri alabilirler. Sistem meta verilerine erişme hakkında daha fazla bilgi için bkz. Meta Veri Görünürlüğü Yapılandırması.

Bu seçenekle oluşturulan prosedürler SQL Server çoğaltmasının bir parçası olarak yayımlanamaz.

Bu seçenek, ortak dil çalışma zamanı (CLR) tarafından saklanan prosedürler için belirtilemez.

Uyarı

Bir yükseltme sırasında, Veritabanı Motoru sys.sql_module'lerde saklanan gizlenmiş yorumları kullanarak prosedürleri yeniden oluşturur.

OLARAK ÇALIŞTIR
Erişim sağlandıktan sonra saklanan prosedürün çalıştırılacağı güvenlik bağlamını belirler.

Daha fazla bilgi için bkz . EXECUTE AS Yan Tümcesi (Transact-SQL).

ÇOĞALTMA IÇIN

Kopyalama için oluşturulan depolanmış prosedürlerin Abone üzerinde çalıştırılamadığını belirtir. FOR REPLICATION seçeneğiyle oluşturulan bir saklanan prosedür, yalnızca replikasyon sırasında çalıştırılan bir işlem filtresi olarak kullanılır. FOR REPLICATION belirtilmişse parametreler ilan edilemez. Bu seçenek CLR prosedürleri için geçerli değildir. FOR REPLICATION ile oluşturulan yordamlar için YENIDEN DERLE seçeneği yoksayılır.

Uyarı

Bu seçenek, kapalı bir veritabanında mevcut değildir.

{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Yordamın gövdesini oluşturan bir veya daha fazla Transact-SQL deyimi. deyimlerini içine almak için isteğe bağlı BEGIN ve END anahtar sözcüklerini kullanabilirsiniz. Daha fazla bilgi için, CREATE PROCEDURE (Transact-SQL) içindeki En İyi Uygulamalar, Genel Açıklamalar ve Sınırlamalar ve Kısıtlamalar bölümlerine bakınız.

DIŞ ADIM assembly_name.class_name.method_name
için geçerlidir: SQL Server 2008 (10.0.x) ve üzeri.

CLR depolanan bir prosedürün referans verilmesi için .NET Framework montajının yöntemini belirtir. class_name geçerli bir SQL Server tanımlayıcısı olmalı ve derlemede sınıf olarak bulunmalıdır. Sınıfın isim uzayı nitelikli bir adı varsa, isim alanı parçalarını ayırmak için bir nokta (.) kullanırsa, sınıf adı parantez ([]) veya tırnak işareti ("") kullanılarak sınırlandırılmalıdır. Belirtilen yöntem, sınıfının statik bir yöntemi olmalıdır.

Varsayılan olarak, SQL Server CLR kodunu çalıştıramaz. Ortak dil çalışma zamanı modüllerine referans veren veritabanı nesneleri oluşturabilir, değiştirebilir ve bırakabilirsiniz; ancak bu referansları SQL Server'da CLR etkin seçeneğini etkinleştirmeden çalıştıramazsınız. Seçeneği etkinleştirmek için sp_configure kullanın.

Uyarı

CLR yordamları, kapsanan bir veritabanında desteklenmez.

Genel Açıklamalar

Transact-SQL saklı yordamlar CLR saklı yordamları olacak şekilde değiştirilemez ve bunun tersi de geçerlidir.

ALTER PROCEDURE izinleri değiştirmez ve bağımlı saklanan prosedürleri veya tetikleyicileri etkilemez. Ancak, QUOTED_IDENTIFIER ve ANSI_NULLS için mevcut oturum ayarları, değiştirildiğinde saklanan prosedüre dahil edilir. Eğer ayarlar, saklanan prosedür ilk oluşturulduğunda geçerli olanlardan farklıysa, saklanan prosedürün davranışı değişebilir.

Önceki bir prosedür tanımı WITH ENCRYPTION veya WITH RECOMPILE kullanılarak oluşturulduysa, bu seçenekler yalnızca ALTER PROSEDÜRÜ'ne dahil edildiklerinde etkinleştirilir.

Depolanmış prosedürler hakkında daha fazla bilgi için bkz. PROSEDÜR OLUŞTURMA (Transact-SQL).

Security

Permissions

Prosedür üzerinde ALTER izni gerektirir veya db_ddladmin sabit veritabanı rolünde üyelik gerektirir.

Örnekler

Aşağıdaki örnek depolanmış prosedürü uspVendorAllInfo oluşturur. Bu işlem, Adventure Works Cycles sunan tüm satıcıların isimlerini, sağladıkları ürünleri, kredi notlarını ve kullanılabilirliklerini döndürür. Bu prosedür oluşturulduktan sonra, farklı bir sonuç kümesi döndürecek şekilde değiştirilir.

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    

Aşağıdaki örnek, saklanan prosedürü uspVendorAllInfo değiştirir. EXECUTE AS CALLER maddesini kaldırır ve prosedürün gövdesini yalnızca belirli ürünü sağlayan tedarikçileri geri döndürecek şekilde değiştirir. LEFT ve CASE işlevleri sonuç kümesinin görünümünü özelleştirir.

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  

Sonuç kümesi aşağıdadır.

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

Ayrıca Bkz.

PROCEDURE OLUŞTUR (Transact-SQL)
PROSEDÜRÜ KALDIR (Transact-SQL)
ÇALIŞTIR (Transact-SQL)
OLARAK YÜRÜT (Transact-SQL)
OLAY VERILERI (Transact-SQL)
Saklı Yordamlar (Veritabanı Altyapısı)
sys.procedures (Transact-SQL)