Modifier le nom de schéma de la table dans SQL

175

Je veux changer le nom de schéma de la table Employeesdans la base de données. Dans le Employeesnom du schéma de base de données de table actuel, dboje veux le changer exe. Comment puis-je le faire ?

Exemple:

DE

dbo.Employees

À

exe.Employees

J'ai essayé avec cette requête:

ALTER SCHEMA exe TRANSFER dbo.Employees

Mais cela me donne une erreur:

Impossible de modifier le schéma «exe», car il n'existe pas ou vous n'avez pas l'autorisation.

Qu'est-ce que j'ai raté?

le champion
la source
4
Avez-vous créé le schéma exe ?
PinnyM
1
Le schéma exe existe-t-il?
James Culshaw
Non, je n'ai pas créé. Que dois-je faire pour le créer?
theChampion
exécuter create schema: msdn.microsoft.com/en-US/library/ms189462%28v=sql.90%29.aspx
a_horse_with_no_name
J'ai vu cet article mais c'est peu déroutant. Pouvez-vous me montrer comment créer le schéma dans ma situation?
theChampion

Réponses:

272

Créer un schéma:

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

Schéma ALTER:

ALTER SCHEMA exe 
    TRANSFER dbo.Employees
Pandian
la source
3
Pouvez-vous expliquer ce que sont sys.scemas et la fonction EXEC (...)?
theChampion
10
sys.schemasest une table qui contient tous les schémas de la base de données. L'exécutable ('...') exécute simplement un appel SQL dynamique, dans ce cas, il est nécessaire car une commande CREATE SCHEMA doit être la première instruction d'un lot de requêtes et s'exécuter en tant que SQL dynamique vous permet d'obtenir cela.
Eric
Pour toutes les tables , cochez ceci et cela pour le faire en une seule déclaration, espérons aider quelqu'un.
shaijut
L'utilisation du schéma alter semble extrêmement lente. (Je l'ai arrêté après 3 minutes pour transférer une petite table avec 300 lignes.) Au lieu de cela, j'ai utilisé select * dans exe. Employés de dbo.Employees
fivelements
29

Essayez ci-dessous

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
DéveloppementIsMyPassion
la source
J'ai dû utiliser set @sql = 'alter schema [' + @newschema + '] transfer [' + @oldschema + '].' + @tablepour m'assurer que certains mots / caractères spéciaux ne provoquent pas d'erreur.
Stoinov
21
ALTER SCHEMA NewSchema TRANSFER [OldSchema].[TableName]

Je dois toujours utiliser les crochets lorsque j'utilise la ALTER SCHEMArequête en SQL ou que j'obtiens un message d'erreur.

Lauren
la source
5

Grâce à SSMS, j'ai créé un nouveau schéma en:

  • En cliquant sur le dossier Sécurité dans l'Explorateur d'objets de mon serveur,
  • Schémas cliqués avec le bouton droit
  • Sélectionné "Nouveau schéma ..."
  • Nommé mon nouveau schéma (exe dans votre cas)
  • Appuyez sur OK

J'ai trouvé ce post pour changer le schéma, mais j'obtenais également la même erreur d'autorisations en essayant de passer au nouveau schéma. J'ai plusieurs bases de données répertoriées dans mon SSMS, alors j'ai juste essayé de spécifier la base de données et cela a fonctionné:

USE (yourservername)  
ALTER SCHEMA exe TRANSFER dbo.Employees 
Jason D.
la source
3

Votre code est:

FROM
 dbo.Employees
TO
 exe.Employees

J'ai essayé avec cette requête.

ALTER SCHEMA exe TRANSFER dbo.Employees

Il suffit de l'écrire create schema exeet de l'exécuter

user2599599
la source
3
CREATE SCHEMA exe AUTHORIZATION [dbo]
GO

ALTER SCHEMA exe
TRANSFER dbo.Employees
GO
Dilip Kr Singh
la source
0

Soyez très très prudent en renommant les objets dans SQL. Vous pouvez provoquer l'échec des dépendances si vous n'êtes pas complètement loin de ce que vous faites. Cela dit, cela fonctionne facilement (trop) pour renommer des choses à condition que vous ayez un accès approprié à l'environnement:

exec sp_rename 'Nameofobject', 'ReNameofobject'
djangojazz
la source
1
Malheureusement, cela ne fonctionnera pas dans ce scénario, sp_rename ne fonctionne que pour modifier la valeur [nom] d'un objet. Vous ne pouvez pas modifier le schéma avec. Si vous essayez, exec sp_rename 'dbo.Employees', 'exe.Employees'vous obtiendrez le nom [dbo]. [Exe.Employees]
Eric J. Price
ALTER SCHEMA (Nom du schéma) TRANSFER (schemaName). (ObjectName);
djangojazz
Notez également que lorsque vous modifiez le schéma d'une table, les vues qui utilisent cette table ne seront pas mises à jour. Vous devrez mettre à jour manuellement le texte (les noms de schéma) dans ces vues. (Soupir ...)
Mike Gledhill
0

Assurez-vous que vous êtes dans le bon contexte de base de données dans SSMS. J'ai eu la même erreur que vous, mais je savais que le schéma existait déjà. Je n'avais pas réalisé que j'étais dans le contexte «MASTER». ALTER a fonctionné après avoir changé le contexte de ma base de données.

billmack30
la source
0

Au cas où quelqu'un chercherait une version inférieure -

Pour SQL Server 2000:

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

iravinandan
la source