删除AllTables其中ColumnName =“Some Text”

时间:2017-02-27 11:14:06

标签: sql sql-server-2014

我正在使用一些数据库,我需要从他们中删除很多项目。每个数据库中大约有300个表,我试图找到一种方法来删除包含我需要删除的字符串的行。

DELETE FROM TableName WHERE ColumnName='Some String'

工作正常,但我不想为每个表运行它。我希望有办法做点什么:

DELETE FROM * WHERE ColumnName='Some String'

我一直在Google上搜索,并且已经有几篇关于如何删除所有表格中的数据的文章,这不是我想要完成的。

我正在使用MS SQL Server 2014。

我仍然对SQL有些新手,我不知道是否已经有办法解决这个问题,我只是没有使用写搜索术语来查找它。

感谢您的协助。

4 个答案:

答案 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