Bagikan melalui


ALTER SCHEMA (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mentransfer skema yang dapat diamankan.

Konvensi sintaks transact-SQL

Sintaksis

-- Syntax for SQL Server and Azure SQL Database  
  
ALTER SCHEMA schema_name   
   TRANSFER [ <entity_type> :: ] securable_name   
[;]  
  
<entity_type> ::=  
    {  
    Object | Type | XML Schema Collection  
    }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
  
ALTER SCHEMA schema_name   
   TRANSFER [ OBJECT :: ] securable_name   
[;]  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

schema_name
Adalah nama skema dalam database saat ini, tempat yang dapat diamankan akan dipindahkan. Tidak boleh SYS atau INFORMATION_SCHEMA.

<entity_type>
Adalah kelas entitas tempat pemilik diubah. Objek adalah default.

securable_name
Adalah nama satu bagian atau dua bagian dari lingkup skema yang dapat diamankan untuk dipindahkan ke dalam skema.

Keterangan

Pengguna dan skema sepenuhnya terpisah.

ALTER SCHEMA hanya dapat digunakan untuk memindahkan keamanan antar skema dalam database yang sama. Untuk mengubah atau menghilangkan yang dapat diamankan dalam skema, gunakan pernyataan ALTER atau DROP khusus untuk yang dapat diamankan.

Jika nama satu bagian digunakan untuk securable_name, aturan resolusi nama yang saat ini berlaku akan digunakan untuk menemukan yang dapat diamankan.

Semua izin yang terkait dengan yang dapat diamankan akan dihilangkan ketika diamankan dipindahkan ke skema baru. Jika pemilik securable telah ditetapkan secara eksplisit, pemilik akan tetap tidak berubah. Jika pemilik securable telah diatur ke PEMILIK SKEMA, pemilik akan tetap menjadi PEMILIK SKEMA; namun, setelah pemindahan PEMILIK SKEMA akan diselesaikan kepada pemilik skema baru. Principal_id pemilik baru adalah NULL.

Memindahkan prosedur tersimpan, fungsi, tampilan, atau pemicu tidak akan mengubah nama skema, jika ada, dari objek yang sesuai baik di kolom definisi tampilan katalog sys.sql_modules atau diperoleh menggunakan fungsi bawaan OBJECT_DEFINITION . Oleh karena itu, kami menyarankan agar ALTER SCHEMA tidak digunakan untuk memindahkan jenis objek ini. Sebagai gantinya, letakkan dan buat ulang objek dalam skema barunya.

Memindahkan objek seperti tabel atau sinonim tidak akan memperbarui referensi secara otomatis ke objek tersebut. Anda harus mengubah objek apa pun yang mereferensikan objek yang ditransfer secara manual. Misalnya, jika Anda memindahkan tabel dan tabel tersebut dirujuk dalam pemicu, Anda harus memodifikasi pemicu untuk mencerminkan nama skema baru. Gunakan sys.sql_expression_dependencies untuk mencantumkan dependensi pada objek sebelum memindahkannya.

Untuk mengubah skema tabel dengan menggunakan SQL Server Management Studio, di Object Explorer, klik kanan pada tabel lalu klik Desain. Tekan F4 untuk membuka jendela Properti. Dalam kotak Skema , pilih skema baru.

ALTER SCHEMA menggunakan kunci tingkat skema.

Perhatian

Dimulai dengan SQL Server 2005, perilaku skema berubah. Akibatnya, kode yang mengasumsikan bahwa skema setara dengan pengguna database mungkin tidak lagi mengembalikan hasil yang benar. Tampilan katalog lama, termasuk sysobjects, tidak boleh digunakan dalam database di mana salah satu pernyataan DDL berikut pernah digunakan: 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. Dalam database tersebut, Anda harus menggunakan tampilan katalog baru. Tampilan katalog baru memperhitungkan pemisahan prinsipal dan skema yang diperkenalkan di SQL Server 2005. Untuk informasi selengkapnya tentang tampilan katalog, lihat Tampilan Katalog (Transact-SQL).

Izin

Untuk mentransfer yang dapat diamankan dari skema lain, pengguna saat ini harus memiliki izin CONTROL pada izin yang dapat diamankan (bukan skema) dan MENGUBAH pada skema target.

Jika yang dapat diamankan memiliki spesifikasi EXECUTE AS OWNER di atasnya dan pemilik diatur ke PEMILIK SKEMA, pengguna juga harus memiliki izin IMPERSONATE pada pemilik skema target.

Semua izin yang terkait dengan keamanan yang sedang ditransfer akan dihilangkan saat dipindahkan.

Contoh

J. Mentransfer kepemilikan tabel

Contoh berikut memodifikasi skema HumanResources dengan mentransfer tabel Address dari skema Person ke HumanResources dalam skema.

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

B. Mentransfer kepemilikan jenis

Contoh berikut membuat jenis dalam Production skema, lalu mentransfer jenis ke Person skema.

USE AdventureWorks2022;  
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  

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Mentransfer kepemilikan tabel

Contoh berikut membuat tabel Region dalam dbo skema, membuat Sales skema, lalu memindahkan Region tabel dari dbo skema ke Sales skema.

CREATE TABLE dbo.Region   
    (Region_id INT NOT NULL,  
    Region_Name CHAR(5) NOT NULL)  
WITH (DISTRIBUTION = REPLICATE);  
GO  
  
CREATE SCHEMA Sales;  
GO  
  
ALTER SCHEMA Sales TRANSFER OBJECT::dbo.Region;  
GO  

Lihat Juga

MEMBUAT SKEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
EVENTDATA (Transact-SQL)