web-dev-qa-db-fra.com

Nommé accidentellement toutes les tables de ma base de données commençant par un nombre

J'ai accidentellement nommé toutes mes tables (100+) dans ma base de données SQL avec le préfixe 2019_

Je ne savais pas que ce n'était pas une bonne idée jusqu'à présent (je viens de revenir à SQL après 2 ans)

Existe-t-il un moyen de l'échanger en bloc vers un suffixe ou même de supprimer toutes les tables? Je n'arrive même pas à les ouvrir. Je ne veux vraiment pas les parcourir tous manuellement.

Toutes mes excuses si c'est une question stupide, potentiellement googler les mauvais termes

Merci!

9
Mandarin

Dans votre situation, j'utiliserais probablement un script comme celui-ci pour générer tous les sp_rename commandes pour moi:

SELECT SCHEMA_NAME(schema_id) as schemaname, name as tablename, 
cmd = 'EXEC sp_rename ''' + SCHEMA_NAME(schema_id) + '.' + name + ''', ''' 
  + SUBSTRING(name, 6, 99) + ''';'
FROM sys.tables
WHERE type = 'U'
AND is_ms_shipped = 0
AND name LIKE '2019[_]%'

Cela prend le nom du sys.tables table système et recherche toutes les tables créées par l'utilisateur dont le nom commence par 2019_. Il génère une liste de sp_rename, que vous pouvez copier dans une nouvelle fenêtre SSMS et examiner attentivement pour vous assurer qu'elles semblent correctes avant de s'exécuter.

Notez que cela va casser tous les autres objets (vues, déclencheurs, proc stockés, etc.) qui se réfèrent à ces tables, donc j'espère que cette base de données est très tôt dans le développement.

19
BradC

Réponses partielles initialement laissées sous forme de commentaires:

eagle275 : Un nom de table commençant par un nombre est toujours du SQL valide, mais pour "lire" à partir de SQL Server, vous l'écrivez comme [dbo].[table_name].

fraise : Tout d'abord, faites une sauvegarde. Ensuite, vous pouvez générer un script de la base de données et le modifier simplement avec votre éditeur de texte préféré.

tibor-karaszi : Puisque vous dites "même supprimer toutes les tables", il est peut-être plus facile de simplement supprimer la base de données et d'en créer une nouvelle? Cela dépend bien sûr s'il y a d'autres éléments dans la base de données que vous souhaitez conserver.

david-spillett : Toutes les vues, procédures stockées, déclencheurs, fonctions, etc. dans la base de données elle-même auront également besoin d'une mise à jour des références de table. Cela pourrait être une tâche et un problème importants à automatiser s'il existe des noms d'objets autres que ceux des tables qui ne sont pas mis à jour. Si cette base de données est en direct, vous feriez mieux de laisser l'erreur en place pour l'instant, sauf si vous avez le budget pour une bonne partie du temps de test!

2
user195398