【问题标题】:Delete data from SQL Tables从 SQL 表中删除数据
【发布时间】:2016-12-08 18:26:48
【问题描述】:

我有 10 个表,比如 Table_1、Table_2、Table_3、Table_4 ...、Table_10.. 我必须从除 Table_4 之外的所有表中删除数据。是否有任何单行查询可以做到这一点。(使用'LIKE','IN'等)“从表名中删除*,如Table_ where Table NOT IN('Table_4')”..

【问题讨论】:

  • 什么数据库?我还没有考虑清楚,但是您也许可以从架构中获取表名,然后对它们做一些事情。
  • 我的链接对您有帮助吗?

标签: sql sql-delete


【解决方案1】:

如果表的数量超过 10,您不想在 delete 语句中列出所有表。你应该坚持目录并使用光标:

declare @table nvarchar(max)
delcare @cur cursor

set @cur = cursor fast_forward for
  select name
  from sys.tables
  where name like 'Table_%'
  and name not like 'Table_4'

open @cur
fetch next from @cur into @table

while(@@fetch_status = 0)
begin
  sp_executesql 'DELETE FROM ' + @table

  fetch next from @cur into @table

end
close @cur
deallocate @cur

编辑:此答案仅适用于 MS SQL :)

【讨论】:

  • 这不是你的“错误”,但似乎写表名更好...更少的写作,更多的可读性,适用于每个数据库。 =)
  • 如果有 10000 个表呢? :-)
  • 所以你会遇到很多问题然后删除他们的数据...... lol
【解决方案2】:
use [db_name]

declare @sql nvarchar(max)

select @SQL = 
(select ';
DELETE FROM ' + quotename(TABLE_SCHEMA) + '.' + 
quotename(TABLE_NAME) from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'
and TABLE_NAME not in ('mytab1', 'mytab2')

ORDER BY Table_Schema, TABLE_NAME
FOR XML PATH(''), type).value ('.','nvarchar(max)')

print @SQL -- verify

它将创建删除查询并使用此查询删除所需的表并跳过不需要的表。

【讨论】:

    【解决方案3】:

    写一个没有 Table_4 的删除查询

    delete from Table_1,Table_2,Table_3,Table_5,......Table10
    

    【讨论】:

    • 如果您有数千张桌子怎么办?你会继续手动写吗?
    • 这里只有十张桌子所以我建议
    • 如果我说我有 1000 张桌子,你的建议是什么?
    • 为此目的必须使用 T SQL
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多