Bagikan melalui


ALTER SCHEMA (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mentransfer skema yang dapat diamankan.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

schema_name

Skema target dalam database saat ini. Yang dapat diamankan dipindahkan ke dalam skema ini. Tidak dapat berupa SYS atau INFORMATION_SCHEMA.

<entity_type>

Kelas entitas tempat pemilik diubah. Objek adalah default.

securable_name

Nama satu bagian atau dua bagian dari cakupan skema yang dapat diamankan untuk dipindahkan ke dalam skema.

Keterangan

Pengguna dan skema sepenuhnya terpisah. Skema tidak setara dengan pengguna database. Gunakan tampilan Katalog sistem untuk mengidentifikasi perbedaan antara pengguna database dan skema.

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 dihilangkan ketika yang dapat diamankan dipindahkan ke skema baru. Jika pemilik securable telah ditetapkan secara eksplisit, pemilik 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. Pemilik principal_id baru akan menjadi NULL.

Penting

Jika Anda menggunakan ALTER SCHEMA untuk mentransfer prosedur tersimpan, fungsi, tampilan, atau pemicu ke skema lain, itu tidak akan mengubah nama skema, jika ada, objek di definition kolom tampilan katalog sys.sql_modules , atau dalam hasil fungsi bawaan OBJECT_DEFINITION . Oleh karena itu, ALTER SCHEMA tidak boleh 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 pilih Desain. Tekan F4 untuk membuka jendela Properti. Dalam kotak Skema , pilih skema baru.

ALTER SCHEMA menggunakan kunci tingkat skema.

Perhatian

Di titik akhir analitik Fabric SQL, mentransfer tabel antar skema melalui T-SQL tidak didukung. Ini dapat berdampak negatif pada operasi sinkronisasi antara OneLake dan titik akhir analitik 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