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?

pemenang
sumber
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
jalankan create schema: msdn.microsoft.com/en-US/library/ms189462%28v=sql.90%29.aspx
a_horse_with_no_name
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
Pandian
sumber
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
DevelopmentIsMyPassion
sumber
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.

Lauren
sumber
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 
Jason D.
sumber
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

pengguna2599599
sumber
3
CREATE SCHEMA exe AUTHORIZATION [dbo]
GO

ALTER SCHEMA exe
TRANSFER dbo.Employees
GO
Dilip Kr Singh
sumber
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'
djangojazz
sumber
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.

billmack30
sumber
0

Jika seseorang mencari versi yang lebih rendah -

Untuk SQL Server 2000:

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

iravinandan
sumber