【问题标题】:SQL delete all from all if column A exists and equals B如果 A 列存在且等于 B,则 SQL 将全部删除
【发布时间】:2014-05-31 10:21:46
【问题描述】:

如何从数据库中的所有表中删除所有记录,其中该表有一个名为 systemid 的列,其中 systemid 不等于 1 或 2?

所以我需要查看该表是否包含某个列名,如果是,则检查该列的所有记录的值,如果不是 1 或 2,则删除。在数据库中的所有表上。

尝试清理开发数据库。

--- 更新 ---

我发现了这个 SO 线程:SQL Server : check if table column exists and remove rows

详细说明如下:

IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TAB1')
  IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TAB1' AND  COLUMN_NAME = 'COL1')
    delete TAB1 where COL1 not in (select COL2 from TAB2);

但是由于缺乏知识和经验,我无法通过 SQL 查询正确地完成我想要实现的目标。谁能提供一个带有解释的示例代码?

谢谢各位大侠!

【问题讨论】:

  • 使用information_schema.columns ..
  • 如上所述,您可以使用 information_schema 表/列。我将创建一个存储过程,它读取 information_schema 并为 select created delete 语句中的每一行
  • 我现在会调查一下,谢谢

标签: mysql sql sql-delete


【解决方案1】:
DECLARE @TableName VARCHAR(128);
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'MyColumnName'
DECLARE MyCursor CURSOR FOR  
(SELECT OBJECT_NAME(c.id) as ObjectName
              FROM dbo.syscolumns c
              WHERE 
                OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
                AND c.name = @MyColumn)

OPEN MyCursor 
FETCH NEXT FROM MyCursor into @TableName
WHILE @@FETCH_STATUS = 0  
BEGIN
    EXEC
            (
                 'DELETE ' + @MyColumn
                +' FROM ' + @TableName  
                +' WHERE ' + @MyColumn + ' not  in (1,2)'
            )
    FETCH NEXT FROM MyCursor into @TableName
END
CLOSE MyCursor   
DEALLOCATE MyCursor

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多