我正在使用一些数据库,我需要从他们中删除很多项目。每个数据库中大约有300个表,我试图找到一种方法来删除包含我需要删除的字符串的行。
DELETE FROM TableName WHERE ColumnName='Some String'
工作正常,但我不想为每个表运行它。我希望有办法做点什么:
DELETE FROM * WHERE ColumnName='Some String'
我一直在Google上搜索,并且已经有几篇关于如何删除所有表格中的数据的文章,这不是我想要完成的。
我正在使用MS SQL Server 2014。
我仍然对SQL有些新手,我不知道是否已经有办法解决这个问题,我只是没有使用写搜索术语来查找它。
感谢您的协助。
答案 0 :(得分:1)
这也适用于其他数据库 - 在其他数据库上,您只需将连接的语法从+
更改为||
并更改COLUMNS
系统的模式和名称查看/表。
将查询运行到文件报告。删除所有页眉/页脚。然后,将该文件作为SQL脚本运行。
SELECT
'DELETE FROM ' + table_catalog
+ '.' + table_schema
+ '.' + table_name
+ ' WHERE ' + column_name
+ ' = ''Some String'';'
FROM information_schema.columns
WHERE UPPER(column_name) = 'NAME'
;
我的数据库恰好是Vertica,返回:
DELETE FROM gpb.agreement_type WHERE name = 'Some String';
DELETE FROM gpb.product WHERE name = 'Some String';
DELETE FROM gpb.account_type WHERE name = 'Some String';
DELETE FROM gpb.document_type WHERE name = 'Some String';
DELETE FROM gpb.transaction_type WHERE name = 'Some String';
DELETE FROM gpb.account WHERE name = 'Some String';
DELETE FROM public.people_with_dupes WHERE name = 'Some String';
DELETE FROM public.people WHERE name = 'Some String';
答案 1 :(得分:0)
从单个表中删除列:
ALTER TABLE table_name DROP COLUMN column_name
从多个表中删除列:
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL += 'Alter table ' + Quotename(table_catalog)
+ '.' + Quotename(table_schema) + '.'
+ Quotename(TABLE_NAME) + ' DROP column '
+ Quotename(column_name) + ';'
FROM information_schema.columns where COLUMN_NAME = 'your_column_name' --
EXEC Sp_executesql @sql
答案 2 :(得分:0)
有一个名为sp_MSforeachtable
的未记录(但不是unknown)存储过程。
exec sp_MSforeachtable 'DELETE FROM ? WHERE ColumnName = 'Some String';
答案 3 :(得分:0)
尝试:您可以使用此技术摆脱为每个表键入代码的繁琐工作。您可以先检索具有该objects
的所有<column_name>
,然后使用loop
语句创建delete
。请使用<column_name>
更改real column name
。
请尝试一下,我相信它会对你有用:
select id = identity(int, 1, 1), o.name INTO #object_name
from sys.objects o
inner join sys.columns c on c.object_id = o.object_id
where type = 'u' and c.name = <column_name>
declare @i int = 1, @j int = 0, @sql varchar(500)
select @j = count(*) from #object_name
while (@i <= @j)
begin
declare @tbl_name varchar(100)
select @tbl_name = name from #object_name where id = @i
set @sql = 'delete from ' + @tbl_name + ' where <column_name> = <some_string>'
--print(@sql)
exec(@sql)
set @i = @i+1
end