12. 11. 2004, 15:53 # 1 MOF User Registrierung: 17. 08. 2002 Karma: SQL-Syntax - Mehrere Tabellen löschen Hallo Forum, gibts eigentlich eine Möglichkeit, per einfachem Script alle Tabellen einer Datenbank zu löschen, deren bestimmten Kriterien entsprechen? Also in meinem Fall lösche alle Tabellen deren Name "T" + ### (also 3 Zahlen) ist? Ich hab mal ein bischen gegoogelt und bin auf die "sp_msforeachtable"-proc gestossen. Kann die dabei vielleicht helfen? Grüße Maik (SQL server 2000 SP3 /MSDE Sp3) __________________ WXP Pro SP3, Office 2k7, SQL Server 2005 17. 2004, 15:48 # 2 spinneken hi maik, am einfachsten ist, du schreibst dir ein simples sql-skript, das erst alle tabellen-namen mit den genannten kriterien zurückgibt (tabelle: sysobjects, xtype: 'u' für user-tabelle, usw. ). dann durchlaufen einer schleife, in der du dein t-sql zum tabellen-löschen bastelst (willst du nur die inhalte - also alle datensätze in den tabellen - löschen oder die komplette tabelle? ) z. b. Code: create procedure spDeleteFromTTables as declare @sql varchar(500) declare @tblName varchar(200) declare cur cursor for select [name] from sysobjects where xtype = 'u' and [name] like 't%' open cur fetch next from cur into @tblName while @@fetch_status = 0 begin -- erzeugen des t-sql: datensätze löschen set @sql = 'delete from ' + @tblName -- erzeugen des t-sql: tabelle löschen (hier auskommentiert) -- set @sql = 'drop table ' + @tblName exec(@sql) end close cur deallocate cur lg spinneken 18.
0 Ich weiß, dies ist eine alte post, aber ich habe versucht, all die Antworten hier auf eine Vielzahl von Datenbanken und ich gefunden haben, arbeiten Sie alle manchmal, aber nicht alle von der Zeit für verschiedene (ich kann nur davon ausgehen) Macken von SQL Server. Irgendwann kam ich mit diesem. Ich habe getestet, überall (im Allgemeinen) kann ich das und es funktioniert (ohne irgendwelche versteckten speichern von Prozeduren). Hinweis meist auf SQL Server 2014. (aber die meisten anderen Versionen, die ich habe versucht, es scheint auch geklappt). Ich habe versucht, while-Schleifen und null-Werte etc etc, Cursor und verschiedene andere Formen, aber Sie scheinen immer zu Versagen, auf einige Datenbanken, die aber nicht bei anderen ohne ersichtlichen Grund. Immer ein count und die Verwendung dieser Iteration immer zu funktionieren scheint, auf alles, was Ive getestet. USE [**** YOUR_DATABASE ****] GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -- Drop all referential integrity constraints -- -- Drop all Primary Key constraints.
000', 120))
DELETE TOP ( 500000) dbo. << table_name >>
WHERE timestamp_column < convert ( datetime, @ FlagDate, 102)
WAITFOR DELAY '00:00:01'
select @ msg = 'ROWCOUNT' + convert ( varchar, @ Deleted_Rows);
set @ loopnum = @ loopnum + 1
if @ loopnum > 1000
begin
begin try
DBCC SHRINKFILE ( N '<