2014-04-16 21 views
0

如何删除数据库中所有表中的所有记录,其中表中有一列名为systemid,其中systemid不等于1或2?如果列A存在并等于B,则SQL全部删除全部等于B

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

试图清理开发数据库。

--- UPDATE ---

我发现这个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查询中完成,由于缺乏知识和经验,我可以做到这一点。任何人都可以提供一个示例代码和解释吗?

谢谢溢出!

+0

使用'information_schema.columns' .. – Sathish

+0

如上所述,您可以使用information_schema表/列。我会创建一个存储过程,它读取information_schema,并为select中的每一行创建** delete **语句 – StanislavL

+0

我现在来看看,谢谢 – Arbiter

回答

0
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 
相关问题