ALTER SCHEMA (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Mentransfer yang dapat diamankan di antara skema.
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
ALTER SCHEMA schema_name
TRANSFER [ OBJECT :: ] securable_name
[;]
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
nama_skema
Adalah nama skema dalam database saat ini, tempat yang dapat diamankan akan dipindahkan. Tidak boleh SYS atau INFORMATION_SCHEMA.
<entity_type>
Adalah kelas entitas yang pemiliknya sedang diubah. Objek adalah default.
securable_name
Adalah nama satu bagian atau dua bagian dari cakupan 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 yang dapat diamankan telah ditetapkan secara eksplisit, pemilik akan tetap tidak berubah. Jika pemilik yang dapat diamankan 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. Sebaliknya, hilangkan dan buat ulang objek dalam skema barunya.
Memindahkan objek seperti tabel atau sinonim tidak akan secara otomatis memperbarui referensi 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 mengubah 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, dalam 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 sysobject, 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 pada SQL Server 2005. Untuk informasi selengkapnya tentang tampilan katalog, lihat Tampilan Katalog (SQL Transact).
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 izin 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 yang dapat diamankan yang sedang ditransfer akan dihilangkan saat dipindahkan.
Contoh
A. Mentransfer kepemilikan tabel
Contoh berikut memodifikasi skema HumanResources dengan mentransfer tabel Address dari skema Person ke HumanResources dalam skema.
USE AdventureWorks2012;
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 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
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
CREATE SCHEMA (Transact-SQL)
DROP SCHEMA (SQL Transaksi)
EVENTDATA (SQL Transaksi)
