2010-09-22 6 views
4

Je rebaptisés la table par sp_rename (SQL Server 2008)sql server 2008: table sp_rename a disparu

sp_RENAME 'dbname.scname.oldtblname' 'dbname.scname.newtblnam' 

Le message résultant (il était de couleur noire - si je reçois comme un simple avertissement ou un message réussi) était quelque chose comme "Attention: Changer n'importe quelle partie d'un nom d'objet pourrait casser les scripts et les procédures stockées." Donc, après cette commande, ma table avec 45 millions d'enregistrements a juste disparu et je n'ai aucune sauvegarde. C'était une nouvelle table.

:) Est-ce que vous avez une idée de ramener ma table? :)

p.s. Ouais, mon sourire est pas « :(», parce que quand la gravité du problème monte le seuil, « :(» devient « :) ».

Répondre

8
  • Qu'est-ce que ça dit?
    SSMS ne met pas à jour explorateur d'objets automatiquement de sorte qu'il pourrait être là

    USE dbname SELECT OBJECT_ID ('scname.newtblnam')

  • sp_rename dit

Vous pouvez modifier le nom d'un objet ou le type de données dans la base de données en cours uniquement. Les noms de la plupart des types de données système et des objets système ne peuvent pas être modifiés.

Vous avez spécifié nombase donc il est possible que vous avez un objet [dbname.scname.newtblnam] dans le schéma dbo (ou similaire)

  • Et avez-vous fait une sauvegarde en premier? Les meilleures pratiques avant toute modification de schéma (formel), tu sais

FWIW, je ne l'ai jamais perdu une table ou un autre objet en utilisant sp_rename

+0

Ouais, c'était sous le schéma "scname", mais le nom était "nombd.scname .newtblnam ". Et je ne m'en suis pas rendu compte à cause de centaines de tables. Merci. –

1

Confrontée ce bug terrible aussi, est la solution ici:

nom dans [] est en fait votre nom de table après sp_rename, pour que SQL Server le comprenne entre crochets.

2

Je trouve cela un peu floue, mais la lecture de la documentation pour sp_rename révèle que

exec sp_rename 'udt.TenorSymbol_t_temp', 'udt.TenorSymbol_t', 'USERDATATYPE' 

va créer un type

udt.udt.TenorSymbol_t 

Donc, pour créer le type dans le schéma correct, ne pas spécifier le schéma sur renommer

exec sp_rename 'udt.TenorSymbol_t_temp', 'TenorSymbol_t', 'USERDATATYPE'