Есть ли возможность обрезать один оператор SQL, несколько таблиц?Усечение нескольких таблиц в одном операторе MySQL
Как это:
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
С уважением
Есть ли возможность обрезать один оператор SQL, несколько таблиц?Усечение нескольких таблиц в одном операторе MySQL
Как это:
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp;
С уважением
Нет, вы можете только укоротить одну таблицу с помощью команды TRUNCATE. Чтобы усечь несколько таблиц, вы можете использовать T-SQL и итерировать имена таблиц, чтобы обрезать каждую за раз.
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
Вы можете иметь все ваши имена таблиц через запятую в @tableList переменного и да, вы можете укоротить несколько таблиц из разных схем, если они начинаются.
Вы можете использовать sp_MSforeachtable хранимую процедуру так:
USE MyDatabase
EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'
Или вы можете создать SQL заявление
SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TableName%'
и запустить его выше SQL Statement
отлично, только то, что я искал - спасибо! – maialithar
безупречный. Я использовал это в SSIS, используя exec sql, чтобы получить список и цикл foreach для повторения каждого из них. Я думаю, вы могли бы сделать то же самое в SSMS с помощью курсора. – KeithL
No. Но есть альтернатива :
SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'your-table-name%'
Пример:
SELECT 'TRUNCATE TABLE '+TABLE_NAME+ ';'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'TBL_ORDERS_20%'
Теперь у вас есть результаты ниже для выше Select
Query
TRUNCATE TABLE TBL_ORDERS_2001
TRUNCATE TABLE TBL_ORDERS_2002
TRUNCATE TABLE TBL_ORDERS_2003
TRUNCATE TABLE TBL_ORDERS_2004
или вы можете использовать что-то вроде
select 'Truncate table ' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in ('Table1', 'Table2')
Update:
Глядя на таблицу в вашем примере Query
в вашем вопросе
truncate table #OBJ_AvailabilityTraining, #OBJ_AvailabilityHoliday, #Dates_temp
Я думаю, что вы хотите Truncate
все временные таблицы.
Вы можете сделать это с помощью простого Query
, как этот
select 'Truncate table ' + TABLE_NAME from tempdb.INFORMATION_SCHEMA.TABLES
Bonus например, укоротить все таблицы в одной базе данных, начиная со строки ...
SELECT CONCAT('TRUNCATE TABLE ', TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'my_database_name'
AND TABLE_NAME LIKE 'cache_%';
гм ... делает это на самом деле Работа? –