У меня есть база данных MySQL с несколькими сотнями таблиц.SQL - удалять строки во всех таблицах на основе значения столбца
Мне нужно удалить записи во всех таблицах на основе общего столбца с именем «companyId» - этот столбец присутствует во всех таблицах базы данных.
Как я могу удалить все записи во всех таблицах, где columnId = somenumber?
Спасибо заранее!
Ивано С.
@SocratesG Я попробовал хранимую процедуру, но я получаю ниже создания СП:
ОШИБКА 1064: У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса, используемого рядом с '@TableName VARCHAR (128);
DECLARE @MyColumn VARCHAR (128);
SET @MyColumn = 'Компан' в строке 4
SQL-Заявление:
CREATE PROCEDURE (deletePortalInstance
)
НАЧАТЬ
DECLARE @TableName VARCHAR (128);
DECLARE @MyColumn VARCHAR (128);
SET @MyColumn = '' CompanyID
DECLARE MyCursor КУРСОРОМ ДЛЯ
(SELECT object_name (с.идентификатор), как ObjectName
FROM dbo.syscolumns c
WHERE
OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
AND c.name = @MyColumn)
ОТКРЫТЫЙ MyCursor
FETCH СЛЕДУЮЩИЙ ИЗ MyCursor в @TableName
ПРИ @@ FETCH_STATUS = 0
НАЧАТЬ
EXEC
(
'DELETE ' + @MyColumn
+' FROM ' + @TableName
+' WHERE ' + @MyColumn + ' = 906454'
)
FETCH NEXT FROM MyCursor into @TableName
КОНЕЦ
ЗАКРЫТЬ MyCursor
DEALLOCATE MyCursor
END
ОШИБКА 1064: У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса, используемого рядом с '@TableName VARCHAR (128);
DECLARE @MyColumn VARCHAR (128);
SET @MyColumn = 'Компан' в строке 4
SQL-Заявление:
CREATE PROCEDURE (deletePortalInstance
)
НАЧАТЬ
DECLARE @TableName VARCHAR (128);
DECLARE @MyColumn VARCHAR (128);
SET @MyColumn = '' CompanyID
DECLARE MyCursor КУРСОРОМ ДЛЯ
(SELECT object_name (с.идентификатор), как ObjectName
FROM dbo.syscolumns c
WHERE
OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
AND c.name = @MyColumn)
ОТКРЫТЫЙ MyCursor
FETCH СЛЕДУЮЩИЙ ИЗ MyCursor в @TableName
ПРИ @@ FETCH_STATUS = 0
НАЧАТЬ
EXEC
(
'DELETE ' + @MyColumn
+' FROM ' + @TableName
+' WHERE ' + @MyColumn + ' = 906454'
)
FETCH NEXT FROM MyCursor into @TableName
КОНЕЦ
ЗАКРЫТЬ MyCursor
DEALLOCATE MyCursor
END
Настройте таблицы с помощью соответствующих внешних ключей! – jarlh