Ubah Skema Nama Tabel Dalam SQL


175

Saya ingin mengubah nama skema tabel Employeesdi Database. Dalam tabel Employeesnama skema database saat ini dbosaya ingin mengubahnya exe. Bagaimana saya bisa melakukannya?

Contoh:

DARI

dbo.Employees

UNTUK

exe.Employees

Saya mencoba dengan pertanyaan ini:

ALTER SCHEMA exe TRANSFER dbo.Employees

Tapi ini memberi saya kesalahan:

Tidak dapat mengubah skema 'exe', karena tidak ada atau Anda tidak memiliki izin.

Apa yang saya lewatkan?


4
Sudahkah Anda membuat skema exe ?
PinnyM

1
Apakah ada skema exe?
James Culshaw

Tidak, saya tidak membuat. Apa yang harus saya lakukan untuk membuatnya?
theChampion


Saya melihat artikel ini tetapi agak membingungkan. Bisakah Anda menunjukkan kepada saya bagaimana membuat skema dalam situasi saya?
theChampion

Jawaban:


272

Buat Skema:

IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'exe')) 
BEGIN
    EXEC ('CREATE SCHEMA [exe] AUTHORIZATION [dbo]')
END

Skema ALTER:

ALTER SCHEMA exe 
    TRANSFER dbo.Employees

3
Bisakah Anda menjelaskan apa itu fungsi sys.scemas dan EXEC?
theChampion

10
sys.schemasadalah tabel yang berisi semua skema untuk database. Exec ('...') hanya menjalankan panggilan SQL dinamis, dalam hal ini diperlukan karena perintah CREATE SCHEMA harus menjadi pernyataan pertama dalam kumpulan permintaan dan mengeksekusi ketika SQL dinamis memberi Anda ini.
Eric J. Harga

Untuk semua Tabel , periksa ini dan ini untuk melakukannya dalam satu pernyataan, semoga membantu seseorang.
shaijut

Menggunakan skema perubahan tampaknya sangat lambat. (Saya menghentikannya setelah 3 menit untuk mentransfer meja kecil dengan 300 baris.) Sebagai gantinya, saya menggunakan pilih * ke exe. Karyawan dari dbo.Employees
fivelements

29

Coba di bawah ini

declare @sql varchar(8000), @table varchar(1000), @oldschema varchar(1000), @newschema   varchar(1000)

  set @oldschema = 'dbo'
  set @newschema = 'exe'

 while exists(select * from sys.tables where schema_name(schema_id) = @oldschema)

  begin
      select @table = name from sys.tables 
      where object_id in(select min(object_id) from sys.tables where  schema_name(schema_id)  = @oldschema)

    set @sql = 'alter schema ' + @newschema + ' transfer ' + @oldschema + '.' + @table

   exec(@sql)
 end

Saya harus menggunakan set @sql = 'alter schema [' + @newschema + '] transfer [' + @oldschema + '].' + @tableuntuk memastikan beberapa kata / karakter khusus tidak menyebabkan kesalahan.
Stoinov

21
ALTER SCHEMA NewSchema TRANSFER [OldSchema].[TableName]

Saya selalu harus menggunakan tanda kurung ketika saya menggunakan ALTER SCHEMAkueri dalam SQL, atau saya mendapatkan pesan kesalahan.


5

Melalui SSMS, saya membuat skema baru dengan:

  • Mengklik folder Security di Object Explorer di dalam server saya,
  • Skema yang diklik kanan
  • "Skema Baru ..."
  • Bernama skema baru saya (exe dalam kasus Anda)
  • Tekan OK

Saya menemukan posting ini untuk mengubah skema, tetapi juga mendapatkan kesalahan izin yang sama ketika mencoba mengubah ke skema baru. Saya memiliki beberapa database yang tercantum dalam SSMS saya, jadi saya hanya mencoba menentukan database dan itu berhasil:

USE (yourservername)  
ALTER SCHEMA exe TRANSFER dbo.Employees 

3

Kode Anda adalah:

FROM
 dbo.Employees
TO
 exe.Employees

Saya mencoba dengan pertanyaan ini.

ALTER SCHEMA exe TRANSFER dbo.Employees

Cukup tulis create schema exedan jalankan


3
CREATE SCHEMA exe AUTHORIZATION [dbo]
GO

ALTER SCHEMA exe
TRANSFER dbo.Employees
GO


0

Sangat hati-hati mengganti nama objek dalam sql. Anda dapat menyebabkan dependensi gagal jika Anda tidak sepenuhnya melakukan apa yang Anda lakukan. Setelah mengatakan bahwa ini bekerja dengan mudah (terlalu banyak) untuk mengubah nama hal-hal asalkan Anda memiliki akses yang tepat pada lingkungan:

exec sp_rename 'Nameofobject', 'ReNameofobject'

1
Sayangnya ini tidak akan berfungsi dalam skenario ini, sp_rename hanya berfungsi untuk mengubah nilai [nama] suatu objek. Anda tidak dapat mengubah skema dengan itu. Jika Anda mencoba, exec sp_rename 'dbo.Employees', 'exe.Employees'Anda akan mendapatkan nama [dbo]. [Exe.Pekerja]
Eric J. Price

ALTER SCHEMA (Nama Skema) TRANSFER (schemaName). (ObjectName);
djangojazz

Perhatikan juga bahwa ketika Anda mengubah skema tabel, tampilan apa pun yang menggunakan tabel itu tidak akan diperbarui. Anda harus memperbarui teks (nama skema) secara manual dalam tampilan ini. (Huh ...)
Mike Gledhill

0

Pastikan Anda berada dalam konteks database yang benar di SSMS. Ada kesalahan yang sama dengan Anda, tetapi saya tahu skema tersebut sudah ada. Tidak menyadari bahwa saya berada dalam konteks 'MASTER'. ALTER bekerja setelah saya mengubah konteks ke database saya.


0

Jika seseorang mencari versi yang lebih rendah -

Untuk SQL Server 2000:

sp_changeobjectowner @objname = 'dbo.Employess', @newowner = 'exe'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.