web-dev-qa-db-fra.com

SQL Server Table de renommage d'une autre base de données

Existe-t-il un moyen dans SQL Server de renommer une table dans une autre base de données? Lorsque vous êtes dans la base de données actuelle et dans la migration des données sur une autre base de données de la table TEMP, puis renommez la table TEMP dans une autre base de données. Je ne veux pas utiliser "Utiliser [Base de données]" car le nom de la base de données pourrait changer sur différents serveurs.

Merci pour l'aide à l'avance!

10
AAA

Vous devriez utiliser SQL dynamique pour le faire. Construire une chaîne et l'exécuter. Tant que vous connaissez le nom de la base de données de destination, tout devrait aller bien.

use CurrentDB
declare @x varchar(1000), @otherDb sysname = 'NewDB';

set @x = 'use ' + @otherDB + '

EXEC sp_rename ''dbo.temp'', ''temp2''
'
exec (@x);
print @x;
GO
6
Marian

Utilisation de SQL Dynamic

  USE MyDB1
  GO

  DECLARE @db_name   NVARCHAR(20)   = 'myDB2'
  DECLARE @sql       NVARCHAR(1000)

  SET @sql = N'EXEC '+ quotename(@db_name)+ '..sp_rename ''[MyTable]'', ''[YourTable]'';';

  PRINT @sql;
  EXEC SP_EXECUTESQL @sql;

Ou en spécifiant la base de données dans l'exécutif:

USE MyDB1
GO

EXEC MyDB2..sp_rename 'MyTable', 'YourTable'

Comme indiqué dans http://www.sqlservercenter.com/forums/topic931229-1292-1.aspx

3
yucer

C'est certainement possible, mais remettez-vous que SQL dynamique devrait être évité si possible. Cela conduit facilement à des problèmes de sécurité et de performance.

Après avoir réfléchi un peu à votre question, vous êtes sûr qu'il n'aurait pas plus de sens de créer l'autre table avec le nom correct, puis d'insérer simplement dans la table TEMP? Je suppose que la table TEMP est en fait une table ou une variable de table locale/globale.

3
AndrewSQL

Vous pouvez également utiliser SSMS. L'avantage d'utiliser SSMS est qu'il passera dans vos références et contraintes et renommera également ceux-ci. Il suffit d'ouvrir le navigateur d'objets dans SSMS Trouvez le tableau d'intérêt et renommez-le. Si vous avez des contraintes de clé étrangère dans d'autres tables qui font référence à la table en cours de renommée, il renommera le tableau du nouveau nom de la table dans ces définitions clés.

0
John McPherson