it-swarm.it

Accidentalmente denominato tutte le tabelle nel mio database che iniziano con un numero

Ho casualmente chiamato tutte le mie tabelle (100+) nel mio database sql con il prefisso 2019_

Non sapevo che non fosse una buona idea fino ad ora (appena tornato a SQL dopo 2 anni)

C'è un modo per scambiarlo in blocco in un suffisso o addirittura eliminare tutte le tabelle? Non riesco nemmeno ad aprirli. Davvero non voglio esaminarli tutti manualmente.

Si scusa se questa è una domanda sciocca, potenzialmente google con termini sbagliati

Grazie!

9
Mandarin

Nella tua situazione, probabilmente userei uno script simile a questo per generare tutto il sp_rename comandi per me:

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[_]%'

Questo prende il nome dal sys.tables tabella di sistema e trova tutte le tabelle create dall'utente con un nome che inizia con 2019_. Genera un elenco di sp_rename comandi, che è possibile copiare in una nuova finestra SSMS ed esaminare attentamente per assicurarsi che siano corretti prima di essere eseguiti.

Nota che questo romperà qualsiasi altro oggetto (viste, trigger, processi memorizzati, ecc.) Che si riferiscono a queste tabelle, quindi spero che questo database sia molto presto in fase di sviluppo.

19
BradC

Le risposte parziali inizialmente lasciate come commenti:

eagle275 : un nome di tabella che inizia con un numero è ancora valido SQL, ma per "leggere" da SQL Server, lo scrivi come [dbo].[table_name].

fragola : Innanzitutto, esegui un backup. Quindi, potresti generare uno script del database e modificarlo semplicemente con il tuo editor di testo preferito.

tibor-karaszi : Dal momento che dici "cancella anche tutte le tabelle", forse è più semplice cancellare il database e crearne uno nuovo? Dipende ovviamente se ci sono altre cose che vuoi conservare nel database.

david-spillett : Eventuali viste, procedure memorizzate, trigger, funzioni, ecc. all'interno del DB stesso necessiteranno anche dell'aggiornamento dei riferimenti di tabella. Questo potrebbe essere un compito e un compito significativi da automatizzare se ci sono nomi di oggetti diversi da quelli delle tabelle che non vengono aggiornati. Se questo DB è attivo in qualche modo, potrebbe essere meglio lasciare l'errore per ora, a meno che non si disponga di un budget per una buona parte del tempo di test!

2
user195398