Κατ' αρχάς όταν λές διαγραφή πινάκων τί εννοείς .Διαγραφή τών δεδομένων ή διαγραφή του ίδιου του πίνακα.
Όπως και να έχει το πράγμα πάντως πιστεύω ότι πρέπει να δημιουργήσεις ένα πίνακα (myDeleteTable) που θα έχει μία στήλη (tblName varchar(255)) και θά έχει ώς δεδομένα τά ονόματα τών πινάκων που δέν θέλεις να διαγραφούν σ' αυτά θα περιέχεται και το όνομα του ίδιου του πίνακα.
Το sql query που θα σου επιστρέφει τά ονόματα τών πινάκων που θέλεις να διαγράψεις είναι για τον MSSQL Select name from sysobjects where UPPER(type)='U' and not exists (select * from myDeleteTable where myDeleteTable.tblName=sysobjects.name). Κατόπιν μέ ένα loop μέσα από client μπορείς να εκτελέσεις SQL Script το οποίο θα κάνει delete τα rows του πίνακα ή θα κάνει drop τον ίδιο τον πίνακα άν όμως θέλεις αυτό να γίνει μέσω MSSQL τότε πρέπει να θλοποιήσεις ένα cursor όπως σου περιέγραψε ο cap.
ΥΛΟΠΟΙΗΣΗ CURSOR ΣΤΟΝ MSSQL
declare @tableName varchar(255),@execStr varchar(4000)
declare myFirstCursor cursor for
Select name from sysobjects where UPPER(type)='U' and not exists (select * from myDeleteTable where myDeleteTable.tblName=sysobjects.name)
open myFirstCursor
fetch next from myFirstCursor into @tableName
while @@fetch_status<>-1
begin
---Άν θέλουμε να διαγράψουμε τις γραμμές του πίνακα
select @execStr='delete ' + @tableName
---Άν θέλουμε να κάνουμε drop τον ίδιο τόν πίνακα
select @execStr='if exists (select * from dbo.sysobjects where id = object_id(N''' + @tableName +''') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)' +
' drop table ' + @tableName
---Εκτέλεσ Script
exec (@execStr)
fetch next from myFirstCursor into @tableName
end
close myFirstCursor
deallocate myFirstCursor
Ιωάννης Μανουσάκης