Hallo zusammen,
ich habe eine SQL-Server 2000 DB in es eine ganze Reihe Views, die eine 1:1 Abbildung einer Tabelle mit fast dem selben Namen ist (Tabelle='TP_' , View='VP_') .
Über die Jahre hinweg wurden immer wieder Tabellen hinzugefügt (inkl. View) und auch Tabellen entfernt. Beim entfernen wurden aber die Views nie mit entfernt.
Ich möchte jetzt ein Skript über die DB laufen lassen, das alle Views löscht, zu denen die entsprechende Tabelle fehlt.
[highlight=SQL-Server]
declare @STCursor cursor
declare @sicht varchar(50)
declare @anzahl int
set @STCursor = CURSOR LOCAL FOR SELECT [TPName] FROM [dbo].[TP_Tabellen]
OPEN @STCursor
FETCH NEXT FROM @STCursor INTO @sicht
WHILE @@FETCH_STATUS = 0
BEGIN
Select @anzahl=count(*) from sysobjects where xtype='U' and [name] = REPLACE(@sicht,'VP_','TP_')
if (@anzahl = 0)
BEGIN
DROP VIEW [@sicht]
END
FETCH NEXT FROM @STCursor INTO @sicht
END
CLOSE @STCursor
DEALLOCATE @STCursor
[/highlight]
sieht nett aus, funktioniert aber leider nicht.
Sieht jemand, was ich falsch mache?
ich habe eine SQL-Server 2000 DB in es eine ganze Reihe Views, die eine 1:1 Abbildung einer Tabelle mit fast dem selben Namen ist (Tabelle='TP_' , View='VP_') .
Über die Jahre hinweg wurden immer wieder Tabellen hinzugefügt (inkl. View) und auch Tabellen entfernt. Beim entfernen wurden aber die Views nie mit entfernt.
Ich möchte jetzt ein Skript über die DB laufen lassen, das alle Views löscht, zu denen die entsprechende Tabelle fehlt.
[highlight=SQL-Server]
declare @STCursor cursor
declare @sicht varchar(50)
declare @anzahl int
set @STCursor = CURSOR LOCAL FOR SELECT [TPName] FROM [dbo].[TP_Tabellen]
OPEN @STCursor
FETCH NEXT FROM @STCursor INTO @sicht
WHILE @@FETCH_STATUS = 0
BEGIN
Select @anzahl=count(*) from sysobjects where xtype='U' and [name] = REPLACE(@sicht,'VP_','TP_')
if (@anzahl = 0)
BEGIN
DROP VIEW [@sicht]
END
FETCH NEXT FROM @STCursor INTO @sicht
END
CLOSE @STCursor
DEALLOCATE @STCursor
[/highlight]
sieht nett aus, funktioniert aber leider nicht.
Sieht jemand, was ich falsch mache?
Comment