alter procedure (Transact-sql)
create procedure deyimi yürütme tarafından oluşturulan önceden oluşturulmuş yordama değiştirir SQL Server 2012.
Transact-SQL Sözdizim Kuralları (Transact-SQL)
Sözdizimi
--Transact-SQL Stored Procedure Syntax
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ 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 ]
--CLR Stored Procedure Syntax
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
Bağımsız değişkenler
schema_name
Yordamı ait olduğu şema adı.procedure_name
Değiştirme yordamı adı. Yordam adları için kuralları ile uymak gerekir tanımlayıcıları.**;**number
Böylece onlar arada bir drop procedure deyimi kullanarak bırakılan Grup yordamlar aynı adı için kullanılan varolan isteğe bağlı tamsayı.[!NOT]
Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.
**@**parameter
Yordam parametre. 2.100 Parametreleri için belirtilebilir.[ type_schema_name**.** ] data_type
Parametre ve ait olduğu şema veri türüdür.Veri türü kısıtlamaları hakkında daha fazla bilgi için bkz: procedure (Transact-sql) oluştur.
DEĞİŞEN
Sonuç kümesi bir çıkış parametresi olarak desteklenen belirtir. Bu parametre saklı yordam tarafından dinamik olarak oluşturulur ve içeriğini gösterebilir. Yalnızca imleç parametreler için geçerlidir. Bu seçenek clr yordamları için geçerli değil.default
Parametrenin varsayılan değeridir.OUT | ÇIKIŞ
Parametre dönüş parametresi olduğunu gösterir.READONLY
Parametre değil güncelleştirilmesi veya yordam gövdesinde güncellenmiştir olduğunu gösterir. Parametre türü tablo değer türü ise, salt okunur belirtilmelidir.YENİDEN DERLE
Gösteren Veritabanı Altyapısınot Bu yordam ve yordam için plan zamanında derlenmiş çekirdekler önbellek yok.ENCRYPTION
Gösteren Veritabanı Altyapısıalter procedure deyiminin özgün metni bir obfuscated biçimine dönüştürür. Obfuscation çıktısını doğrudan herhangi bir katalog görünümlerinde görünür değil SQL Server. Sistem tablolarına veya veritabanı dosyalarına erişimi olmayan kullanıcılar karıştırılmış metni alamaz. Ancak, DAC bağlantı noktası üzerinden sistem tablolarına veya doğrudan veritabanı tablolarına erişebilen kullanıcılar metni kullanabilir. Ayrıca, bir hata ayıklayıcıyı sunucu işlemine bağlayabilen kullanıcılar özgün yordamı çalışma zamanında bellekten alabilir. Sistem meta veri erişim hakkında daha fazla bilgi için bkz: Meta veri görünürlük yapılandırma.Bu seçeneği ile oluşturulan yordamlar bir parçası olarak yayınlanan SQL Serverçoğaltma.
Bu seçenek, ortak dil çalışma zamanı (clr) depolanan yordamlar için belirtilemez.
[!NOT]
Yükseltme işlemi sırasında Veritabanı Altyapısıdepolanan obfuscated yorum kullanır sys.sql_modules yordamları yeniden.
EXECUTE AS
Sonra o erişilen saklı yordamı yürütmek güvenlik bağlamında belirtir.Daha fazla bilgi için, bkz. execute as yan tümcesi (Transact-sql).
ÇOĞALTMA İÇİN
Çoğaltma için oluşturulan saklı yordamlar abone üzerinde yürütülemez belirtir. for REPLICATION seçeneğiyle oluşturulmuş bir saklı yordam bir saklı yordam filtre olarak kullanılır ve yalnızca çoğaltma sırasında yürütülecek. Parametreleri olamaz for REPLICATION belirtilirse ilan etti. Bu seçenek clr yordamları için geçerli değil. RECOMPILE seçeneği ile çoğaltma için oluşturulan yordamlar için yoksayılır.[!NOT]
Bu seçenek içerilen bir veritabanında kullanılamaz.
{ [ BEGIN ] sql_statement [;] [ ...n ] [END]}
Bir veya daha fazla Transact-SQLyordam gövdesinde oluşan tablolar. Deyimleri içine isteğe bağlı BEGIN ve end anahtar kelimeler kullanabilirsiniz. Daha fazla bilgi için bkz: en iyi uygulamalar, genel açıklamalar ve sınırlamalar ve kısıtlamalar bölümlerde procedure (Transact-sql) oluştur.Dış ad assembly_name**.class_name.method_name
Yöntemini belirtir bir .NET FrameworkDerleme bir CLR saklı yordamı başvuru. class_namegeçerli olmalıdır SQL Servertanımlayıcısı ve derleme bir sınıf olarak varolmalıdır. Sınıf varsa, bir süre bir ad alanıyla nitelenmiş ad kullanır (.) ad alanının bölümlerini ayırmak için sınıf adı köşeli ayraçlar kullanılarak ayrılmış gerekir ([]) veya tırnak işaretleri (""**). Belirtilen yöntem sınıfının statik bir yöntem olmalıdır.Varsayılan olarak, SQL Serverclr kod yürütülemez. Oluşturmak, değiştirmek ve ortak dil Çalışma Zamanı Modülü başvuru veritabanı nesnelerini bırakın; Ancak, bu başvurular yürütülemiyor SQL Serverolanak kadar clr seçeneği etkin. Seçeneği etkinleştirmek için kullanın sp_configure.
[!NOT]
clr yordamları içerdiği bir veritabanında desteklenmez.
Genel Yorumlar
Transact-SQLsaklı yordamları clr depolanan yordamlar için değiştirilemez ve tam tersi.
alter yordam izinleri değiştirmez ve tüm bağımlı saklı yordamlar veya Tetikleyiciler etkilemez. Ancak değiştirildiğinde geçerli oturum ayarları ansı_nulls ve quoted_ıdentıfıer için saklı yordam dahil. Saklı yordam başlangıçta oluşturulduğunda ayarları etkin o--dan farklı ise, saklı yordamın davranışını değiştirebilir.
Bir önceki yordam tanımı ile şifreleme veya WITH yeniden DERLEYIN kullanılarak oluşturulmuşsa, bu seçenekler yalnızca alter procedure dahil edilmesi etkinleştirilir.
Saklı yordamlar hakkında daha fazla bilgi için bkz: procedure (Transact-sql) oluştur.
Güvenlik
İzinler
Gerektirir ALTERyordam veya üyelik db_ddladmin veritabanı rolü.
Örnekler
Aşağıdaki örnek oluşturur uspVendorAllInfosaklı yordamını. Bu yordam, tedarik tüm satıcıların adlarını döndürür Adventure Works Cycles, onlar tedarik ürünleri, kendi kredi derecelendirme ve kullanılabilirliklerini. Bu yordamı oluşturulduktan sonra farklı sonuç kümesi döndürmek için değiştirilir.
USE AdventureWorks2012;
GO
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 değiştirir uspVendorAllInfosaklı yordamını. execute as arayan yan tümcesi kaldırır ve yalnızca belirtilen ürün tedarik satıcılar dönmek yordam gövdesinde değiştirir. LEFTVe CASEişlevleri sonuç kümesinin görünümünü özelleştirmek.
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
Sonuç kümesi buradadı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.
Başvuru
procedure (Transact-sql) oluştur
procedure (Transact-sql) bırak