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'.
Pour renommer une table dans SQL Server, utilisez la commande sp_rename
:
_exec sp_rename 'schema.old_table_name', 'new_table_name'
_
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';
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
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';
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
C'est ce que j'utilise:
EXEC sp_rename 'MyTable', 'MyTableNewName';
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.
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