Frage

Ich möchte einen SQL-Befehl oder etwas finden, die dies tun können, wo ich eine Tabelle mit dem Namen tblFoo haben und ich möchte es tblFooBar nennen. Allerdings habe ich den Primärschlüssel Änderung auch sein möge, zum Beispiel, zur Zeit ist es:

CONSTRAINT [PK_tblFoo] PRIMARY KEY CLUSTERED 

Und ich will eine Namensänderung, es zu ändern:

CONSTRAINT [PK_tblFooBar] PRIMARY KEY CLUSTERED 

Dann rekursiv durchlaufen und Kaskade diese Änderung auf alle Tabellen, die eine foreigh Schlüsselbeziehung haben, zum Beispiel. von dieser:

CHECK ADD  CONSTRAINT [FK_tblContent_tblFoo] FOREIGN KEY([fooID])

Um dies zu:

 CHECK ADD  CONSTRAINT [FK_tblContent_tblFooBar] FOREIGN KEY([fooID])

Natürlich versuche ich, nicht durch zu gehen und diese manuell alles tun, weil es a) ein fehleranfälliger Prozess ist, und b) es nicht Maßstab.

War es hilfreich?

Lösung

Dies ist nur aus der Spitze von meinem Kopf und ist nicht vollständig (Sie bräuchten einen ähnlichen Code für Indizes hinzufügen). Außerdem müssten Sie entweder Code hinzufügen zu vermeiden Objekte aus einer Tabelle mit dem gleichen Basisnamen umbenennen, aber weitere Zeichen - zum Beispiel, würde dieser Code auch tblFoo2 und alle dazugehörigen Objekte aufzulisten. Hoffentlich es ist ein Anfang für Sie aber.

DECLARE
    @old_name   VARCHAR(100),
    @new_name   VARCHAR(100)

SET @old_name = 'tblFoo'
SET @new_name = 'tblFooBar'

SELECT
    'EXEC sp_rename ''' + name + ''', ''' + REPLACE(name, @old_name, @new_name) + ''''
FROM dbo.sysobjects
WHERE name LIKE '%' + @old_name + '%'

Andere Tipps

Gute Antwort von Tom
Ich habe gerade seine Abfrage hier erweiterte Indizes enthalten

declare
 @old nvarchar(100),
 @new nvarchar(100)

set @old = 'OldName'
set @new = 'NewName'

select 'EXEC sp_rename ''' + name + ''', ''' + 
  REPLACE(name, @old, @new) + ''''
 from sys.objects 
 where name like '%' + @old + '%'
union -- index renames
select 'EXEC sp_rename ''' + (sys.objects.name + '.' + sys.indexes.name)  +  ''', ''' +
  REPLACE(sys.indexes.name, @old, @new) + ''', ''INDEX'''
  from sys.objects 
   left join sys.indexes on sys.objects.object_id = sys.indexes.object_id
  where sys.indexes.name like '%' + @old + '%'

Ein großes Werkzeug, das den Schmerz aus Umbenennen Tabellen nimmt Red Gate SQL umgestalten Es wird automatisch Ihre Abhängigkeit finden und auch für Dich die ganze Zeug funktioniert.

Big Fan: -)

SQL Server wird dies nicht direkt, soweit ich weiß. Sie müssten manuell das Skript bauen die Änderung zu tun. Dies kann durch Erzeugen des SQL für die Tabellendefinition erreicht werden (SSMS wird dies tun) und eine Suche und ersetzen Sie auf den Namen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top