La SQL
requête que j'ai utilisée est:
ALTER TABLE oldtable RENAME TO newtable;
Mais cela me donne une erreur.
Serveur: Msg 156, niveau 15, état 1, ligne 1
Syntaxe incorrecte près du mot clé "TO".
La SQL
requête que j'ai utilisée est:
ALTER TABLE oldtable RENAME TO newtable;
Mais cela me donne une erreur.
Serveur: Msg 156, niveau 15, état 1, ligne 1
Syntaxe incorrecte près du mot clé "TO".
Réponses:
Pour renommer une table dans SQL Server, utilisez la sp_rename
commande:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
champ, sinon votre table pourrait finir par ressembler à quelque chose dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
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 font référence à 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 la fonction de renommer l'objet, et tous dépendent également des objets
Si vous essayez de exec sp_rename
recevoir 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 le réparer, c'était de le réécrire:
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
Voici ce que j'utilise:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Rien n'a fonctionné de ce qui est proposé ici .. Donc, juste pore les données dans un nouveau tableau
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
peut être utile à quelqu'un ..
Dans mon cas, il n'a pas reconnu le nouveau schéma et le dbo en était le propriétaire.
MISE À JOUR
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
A travaillé pour moi. Je l'ai trouvé à partir du script généré automatiquement lors de la mise à jour du PK pour l'une des tables. De cette façon, il a également reconnu le nouveau schéma.
Pour modifier un nom de table avec un schéma différent:
Exemple: remplacez dbo.MyTable1 par wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
, utilisez-le[]
autour du nom de la table. (Je sais, je sais, mais des points peuvent arriver ...) Par exemplesp_rename '[Stupid.name]', 'NewName'
ou avec un schémasp_rename '[dbo.Stupid.name]', 'NewName'