如果列A存在且等于B,SQL从所有列中删除所有

最后发布: 2014-04-16 13:42:03


问题

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

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

尝试清理开发数据库。

-更新-

我发现了这个SO线程: SQL Server:检查表列是否存在并删除行

其中详细说明了以下内容:

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查询正确完成我的工作,而该SQL查询却可以完成我想实现的目标。 任何人都可以提供示例代码并进行解释吗?

谢谢溢出者!

mysql sql sql-delete
回答

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