2016-06-12 9 views
-2

Ich plane, eine gespeicherte Prozedur in T-SQL zu schreiben, um die Tabellen in einer bestimmten Datenbank und einem bestimmten Schema zu kürzen.Tabellen in Datenbanken abschneiden Gespeicherte T-SQL-Prozedur

Die Idee ist, alle Tabellennamen in einer Tabelle zu speichern. Die Tabelle hat 4 Spalten, das sind Datenbankname, Schemaname, Tabellenname und Flag.

Wenn der Flag-Wert auf 0 festgelegt ist, sollte die gespeicherte Prozedur alle diese Tabellen abschneiden.

Kann mir jemand etwas dazu sagen?

+4

Wenn das ist, was Sie tun müssen, tun Sie es dann. Sie müssen dynamisches SQL verwenden, möglicherweise mit Cursorn. Was ist deine wahre Frage? –

+0

Ja, ich mache es. Gedacht, um mehr Einblick von Experten – user1254579

+2

So tun Sie es, und wenn Sie eine bestimmte Frage zu einem Teil haben, kommen Sie zurück und fragen Sie das. –

Antwort

1

Angenommen, Sie eine Tabelle namens @tables, wo Sie die Details der Tabellen speichern abgeschnitten werden, können Sie die folgende Logik/Cursor in Ihrer gespeicherten Prozedur diese Kürzen Tabellen.

Tabelle Halten Tabellen Info

DECLARE @Tables TABLE (DBName SYSNAME , SchemaName SYSNAME 
        ,TableName SYSNAME, Flag INT); 
INSERT INTO @Tables VALUES 
('TestDB' , 'dbo', 'TestTable1', 0), 
('TestDB' , 'dbo', 'TestTable2', 0), 
('TestDB' , 'dbo', 'TestTable3', 1) 

Stored Procedure-Code

Declare @DB  SYSNAME 
     , @Schema SYSNAME 
     , @Table SYSNAME 
     , @Sql VARCHAR(MAX); 


Declare Cur CURSOR LOCAL FAST_FORWARD FOR 
SELECT DBName , SchemaName , TableName 
FROM @Tables 
WHERE Flag = 0 

OPEN Cur 
    FETCH NEXT FROM Cur INTO @DB , @Schema , @Table 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 

SET @Sql = N'TRUNCATE TABLE ' 
      + QUOTENAME (@DB) + '.' + QUOTENAME (@Schema) + '.' + QUOTENAME (@Table) 

    Exec sp_executesql @Sql 

    FETCH NEXT FROM Cur INTO @DB , @Schema , @Table 

END 

CLOSE Cur 
DEALLOCATE Cur 
1

Vielleicht so etwas wie dieses

Declare @Table table (dbname varchar(50),schem varchar(50),tablename varchar(50),flag bit) 
Insert into @Table (dbname,schem,tablename,flag) values 
('dbName1','dbo','MyTable1',0), 
('dbName2','dbo','MyTableA',1), 
('dbName1','dbo','MyTableB',0), 
('dbName2','dbo','MyTableZ',1), 
('dbName1','dbo','MyTable2',0) 


Declare @SQL varchar(max) = '' 
Select @SQL = coalesce(@SQL,' ') + ';truncate table [' +dbname +'].[' + schem +'].[' + tablename +']' 
From @Table 
Where Flag=1 

Select @SQL 
--Exec(@SQL) 
Verwandte Themen