ALTER SCHEMA (Transact-SQL)

Güvenliği sağlanabilir bir öğeyi şemalar arasında aktarır.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

ALTER SCHEMA schema_name 
   TRANSFER [ <entity_type> :: ] securable_name [;]

<entity_type> ::=
    {
    Object | Type | XML Schema Collection
    }

Bağımsız değişkenler

  • schema_name
    Geçerli veritabanındaki güvenliği sağlanabilir öğenin içine taşınacağı şemanın adıdır. SYS veya INFORMATION_SCHEMA olamaz.

  • <entity_type>
    Sahibinin değiştirilmekte olduğu varlığın sınıfıdır. Object varsayılan değerdir.

  • securable_name
    Şemaya taşınacak olan şemada içerilen güvenliği sağlanabilir öğenin bir parçalı veya iki parçalı adıdır.

Açıklamalar

Kullanıcılar ve şemalar tamamen ayrıdır.

ALTER SCHEMA yalnızca güvenliği sağlanabilir öğeleri aynı veritabanındaki şemalar arasında taşımak için kullanılabilir. Güvenliği sağlanabilir bir öğeyi bir şema içinde değiştirmek veya şema içine bırakmak için söz konusu güvenliği sağlanabilir öğeye özgü ALTER veya DROP deyimini kullanın.

securable_name için tek parçalı ad kullanılırsa, güvenliği sağlanabilir öğeyi bulmak için halen yürürlükte olan ad çözümleme kuralları kullanılır.

Güvenliği sağlanabilir öğe yeni şemaya taşındığında, öğe ile ilişkili tüm izinler bırakılır. Güvenliği sağlanabilir öğenin sahibi açık olarak ayarlanmışsa, sahip değiştirilmeden kalır. Güvenliği sağlanabilir öğenin sahibi SCHEMA OWNER olarak ayarlanmışsa, sahip SCHEMA OWNER olarak kalır ancak taşımadan sonra SCHEMA OWNER değeri yeni şemanın sahibi olarak çözümlenir. Yeni sahibin principal_id değeri NULL olur.

Bir tablo veya görünümün şemasını SQL Server Management Studio komutunu kullanarak değiştirmek için, Nesne Arayıcısı'nda tablo veya görünümü sağ tıklatın, sonra Tasarım'ı tıklatın. Özellikler penceresini açmak için F4 tuşuna basın. Şema kutusunda yeni bir şema seçin.

Dikkat notuDikkat

SQL Server 2005'ten itibaren şemaların davranışları değişmiştir. Bunun sonucunda, şemaların veritabanı kullanıcılarına denk olduğunu kabul eden kod artık doğru sonuçlar döndürmeyebilir. Eski katalog görünümleri, sysobjects dahil, aşağıdaki DLL ifadelerinden herhangi birinin kullanıldığı bir veritabanında kullanılmamalıdır: CREATE SCHEMA, ALTER SCHEMA, DROP SCHEMA, CREATE USER, ALTER USER, DROP USER, CREATE ROLE, ALTER ROLE, DROP ROLE, CREATE APPROLE, ALTER APPROLE, DROP APPROLE, ALTER AUTHORIZATION. Bu gibi veritabanlarında bunun yerine yeni katalog görünümlerini kullanmalısınız. Yeni katalog görünümleri, ilk olarak SQL Server 2005 içinde kullanılan prensiplerin ve şemaların ayrılmasını dikkate alır. Katalog görünümleri hakkında daha fazla bilgi için, bkz. Catalog Views (Transact-SQL) (Katalog Görünümleri (Transact-SQL)).

İzinler

Başka bir şemadan güvenliği sağlanabilir bir öğeyi aktarmak için geçerli kullanıcının güvenliği sağlanabilir öğe üzerinde (şemada değil) CONTROL iznine ve hedef şemada ALTER iznine sahip olması gerekir.

Güvenliği sağlanabilir öğe için EXECUTE AS OWNER belirtilmişse ve sahip SCHEMA OWNER olarak ayarlanmışsa, kullanıcının ayrıca hedef şemanın sahibi üzerinde IMPERSONATION iznine sahip olması gerekir.

Aktarılmakta olan güvenliği sağlanabilir öğe ile ilişkili tüm izinler, öğe taşındığında bırakılır.

Örnekler

A.Bir tablonun sahipliğini aktarma

Aşağıdaki örnek HumanResources şemasını, Address tablosunu Person şemasından bu şemaya aktararak değiştirmektedir.

USE AdventureWorks2012;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

USE AdventureWorks2012;
GO
ALTER SCHEMA HumanResources TRANSFER Person.Address;
GO

B.Bir türün sahipliğini aktarma

Aşağıdaki örnek Production şemasında bir tür oluşturmakta, sonra bu türü Person şemasına aktarmaktadır.

USE AdventureWorks2012;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

USE AdventureWorks2012;
GO

CREATE TYPE Production.TestType FROM [varchar](10) NOT NULL ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

-- Change the type to the Person schema.
ALTER SCHEMA Person TRANSFER type::Production.TestType ;
GO

-- Check the type owner.
SELECT sys.types.name, sys.types.schema_id, sys.schemas.name
    FROM sys.types JOIN sys.schemas 
        ON sys.types.schema_id = sys.schemas.schema_id 
    WHERE sys.types.name = 'TestType' ;
GO

Ayrıca bkz.

Başvuru

ŞEMA (Transact-sql) oluştur

ŞEMA (Transact-sql) bırak

eventdata (Transact-sql)