Czy istnieje możliwość obcięcia z jedną instrukcją SQL, wieloma tabelami?Ucinanie wielu tabel w jednym poleceniu MySQL
Jak to:
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
Pozdrowienia
Czy istnieje możliwość obcięcia z jedną instrukcją SQL, wieloma tabelami?Ucinanie wielu tabel w jednym poleceniu MySQL
Jak to:
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
Pozdrowienia
Nie można obciąć tylko pojedynczą tabelę z poleceniem TRUNCATE. Aby skrócić wiele tabel, możesz użyć T-SQL i iterować po nazwach tabel, aby skracać każdą z nich naraz.
DECLARE @delimiter CHAR(1),
@tableList VARCHAR(MAX),
@tableName VARCHAR(20),
@currLen INT
SET @delimiter = ','
SET @tableList = 'table1,table2,table3'
WHILE LEN(@tableList) > 0
BEGIN
SELECT @currLen =
(
CASE charindex(@delimiter, @tableList)
WHEN 0 THEN len(@tableList )
ELSE (charindex(@delimiter, @tableList ) -1)
END
)
SELECT @tableName = SUBSTRING (@tableList,1,@currLen)
TRUNCATE TABLE @tableName
SELECT tableList =
(
CASE (len(@tableList) - @currLen )
WHEN 0 THEN ''
ELSE right(@tableList, len(@tableList) - @currLen - 1)
END
)
END
Można mieć wszystkie swoje oddzielone przecinkami nazwy tabel w zmiennej @tableList i tak można obciąć wiele tabel z różnych schematów, jeśli są prefiksem.
można użyć sp_MSforeachtable procedurę przechowywaną tak:
USE MyDatabase
EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'
Albo można CREATE SQL
SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TableName%'
i uruchomić Powyższa instrukcja SQL
doskonały, właśnie tego szukałem - dzięki! – maialithar
doskonały. Użyłem tego w SSIS przy użyciu exec sql, aby uzyskać listę i pętlę foreach do iteracji po każdej z nich. Sądzę, że możesz zrobić to samo w SSMS z kursorem. – KeithL
nr Ale istnieje alternatywa :
SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'your-table-name%'
Przykład:
SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TBL_ORDERS_20%'
Teraz masz poniżej wyników dla powyższego Select
Query
TRUNCATE TABLE TBL_ORDERS_2001
TRUNCATE TABLE TBL_ORDERS_2002
TRUNCATE TABLE TBL_ORDERS_2003
TRUNCATE TABLE TBL_ORDERS_2004
lub użyć coś takiego
select 'Truncate table ' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('Table1', 'Table2')
Aktualizacja:
Patrząc na stole w swoim przykładzie Query
w swoim pytaniu
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp
myślę chcesz Truncate
wszystkim tymczasowe tabele.
Można to zrobić za pomocą prostego Query
jak ten
select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
przykład Bonus, obciąć wszystkich tabel w jednej bazie danych zaczynające się ciągiem ...
SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_database_name'
AND TABLE_NAME LIKE 'cache_%';
um ... Czy to rzeczywiście praca? –