web-dev-qa-db-fra.com

Comment renommer une table dans SQL Server?

La requête SQL que j'ai utilisée est la suivante:

ALTER TABLE oldtable RENAME TO newtable;

Mais ça me donne une erreur.

Serveur: Msg 156, niveau 15, état 1, ligne 1
Syntaxe incorrecte près du mot clé 'TO'.

357
Switch

Pour renommer une table dans SQL Server, utilisez la commande sp_rename :

_exec sp_rename 'schema.old_table_name', 'new_table_name'
_
647
Jeff Hornby

Pour renommer une colonne:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

Pour renommer une table:

sp_rename 'old_table_name','new_table_name';
135
Ravi Kumar

Lorsque vous utilisez sp_rename qui fonctionne comme dans les réponses ci-dessus, vérifiez également quels objets sont affectés après le changement de nom, qui référencent cette table, car vous devez également les modifier.

J'ai pris un exemple de code pour les dépendances de table sur le blog de Pinal Dave ici

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

Donc, tous ces objets dépendants doivent également être mis à jour

Ou utilisez un complément si vous le pouvez, certains d’entre eux ont une fonction permettant de renommer un objet, et tous les objets dépendants aussi

14
user3260414

Si vous essayez exec sp_rename et recevez une erreur LockMatchID, il peut être utile d’ajouter d’abord une instruction use [database]:

J'ai essayé

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

Ce que je devais faire pour résoudre ce problème était de le réécrire comme suit:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
9
Stian

Nom de la table

sp_rename 'db_name.old_table_name', 'new_table_name'

Colonne

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

Indice

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

également disponible pour la statique et les types de données

6
budamivardi

C'est ce que j'utilise:

EXEC sp_rename 'MyTable', 'MyTableNewName';
6
Sylvain Rodrigue

Rien n'a fonctionné à partir de ce qui est proposé ici. Alors, introduisez les données dans un nouveau tableau

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

sera peut-être utile pour quelqu'un ..

Dans mon cas, le nouveau schéma n’était pas reconnu et le propriétaire était dbo.

MISE À JOUR

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

Travaillé pour moi Je l'ai trouvé dans le script généré automatiquement lors de la mise à jour de la clé pour l'une des tables. De cette façon, il a également reconnu le nouveau schéma.

0

Pour changer un nom de table avec un autre schéma:

Exemple: remplacez dbo.Table1 par work.My Table2

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
0
live-love