增量数据库同步软件PanguSync侵入式全面清理脚本

Sqlserver

-- 变量声明  
DECLARE @tableName NVARCHAR(256)  
DECLARE @indexName NVARCHAR(128)  
DECLARE @triggerName NVARCHAR(256)  
DECLARE @sql NVARCHAR(MAX)  
DECLARE @constraintsname NVARCHAR(256)  
-- 声明游标来遍历所有用户表  
DECLARE curTables CURSOR FOR   
SELECT name   
FROM sys.tables   
WHERE type = 'U' -- 用户表  

-- 打开游标  
OPEN curTables  
FETCH NEXT FROM curTables INTO @tableName  
  
-- 循环遍历所有表  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    -- 删除索引source  
    BEGIN TRY  
        SELECT @indexName = name  
        FROM sys.indexes  
        WHERE object_id = OBJECT_ID(@tableName)  
        AND name = 'I_PanguSyncSourceTimestamp'  
  
        IF @indexName IS NOT NULL  
        BEGIN  
            SET @sql = 'DROP INDEX ' + QUOTENAME(@indexName) + ' ON ' + QUOTENAME(@tableName) + ';'  
            EXEC sp_executesql @sql  
            PRINT 'Index I_PanguSyncSourceTimestamp dropped from ' + @tableName + '.'  
        END  
    END TRY  
    BEGIN CATCH  
        PRINT 'Error dropping index I_PanguSyncSourceTimestamp from ' + @tableName + '. Error: ' + ERROR_MESSAGE()  
    END CATCH  
		
	
	--删除CONSTRAINT source
	  SELECT top 1 @constraintsname= c.name FROM sysconstraints a 
INNER JOIN syscolumns b  on a.colid=b.colid
INNER JOIN sysobjects c  on a.constid=c.id
WHERE a.id=object_id(@tableName)
AND b.name='C_PanguSyncSourceTimestamp'

   IF @constraintsname IS NOT NULL 	
	 BEGIN  
        SET @sql = 'ALTER TABLE ' + QUOTENAME(@tableName) + ' DROP CONSTRAINT '+ QUOTENAME(@constraintsname)+';'
        EXEC sp_executesql @sql  
        
    END  
		
		
	
    -- 删除字段  source
    IF EXISTS (  
        SELECT 1   
        FROM sys.columns   
        WHERE name = 'C_PanguSyncSourceTimestamp'   
        AND object_id = OBJECT_ID(@tableName)  
    )  
    BEGIN  
        SET @sql = 'ALTER TABLE ' + QUOTENAME(@tableName) + ' DROP COLUMN C_PanguSyncSourceTimestamp;'  
        EXEC sp_executesql @sql  
        PRINT 'Column C_PanguSyncSourceTimestamp dropped from ' + @tableName  
    END  
		
		
		
		 -- 删除索引 target
    BEGIN TRY  
        SELECT @indexName = name  
        FROM sys.indexes  
        WHERE object_id = OBJECT_ID(@tableName)  
        AND name = 'I_PanguSyncTargetTimestamp'  
  
        IF @indexName IS NOT NULL  
        BEGIN  
            SET @sql = 'DROP INDEX ' + QUOTENAME(@indexName) + ' ON ' + QUOTENAME(@tableName) + ';'  
            EXEC sp_executesql @sql  
            PRINT 'Index I_PanguSyncTargetTimestamp dropped from ' + @tableName + '.'  
        END  
    END TRY  
    BEGIN CATCH  
        PRINT 'Error dropping index I_PanguSyncTargetTimestamp from ' + @tableName + '. Error: ' + ERROR_MESSAGE()  
    END CATCH  
		
	
	--删除CONSTRAINT target
	  SELECT top 1 @constraintsname= c.name FROM sysconstraints a 
INNER JOIN syscolumns b  on a.colid=b.colid
INNER JOIN sysobjects c  on a.constid=c.id
WHERE a.id=object_id(@tableName)
AND b.name='C_PanguSyncTargetTimestamp'

   IF @constraintsname IS NOT NULL 	
	 BEGIN  
        SET @sql = 'ALTER TABLE ' + QUOTENAME(@tableName) + ' DROP CONSTRAINT '+ QUOTENAME(@constraintsname)+';'
        EXEC sp_executesql @sql  
        
    END  
		
		
	
    -- 删除字段  target
    IF EXISTS (  
        SELECT 1   
        FROM sys.columns   
        WHERE name = 'C_PanguSyncTargetTimestamp'   
        AND object_id = OBJECT_ID(@tableName)  
    )  
    BEGIN  
        SET @sql = 'ALTER TABLE ' + QUOTENAME(@tableName) + ' DROP COLUMN C_PanguSyncTargetTimestamp;'  
        EXEC sp_executesql @sql  
        PRINT 'Column C_PanguSyncTargetTimestamp dropped from ' + @tableName  
    END  
		
		
		
  
    -- 删除触发器(包含PGD或PanguSync)  
    DECLARE curTriggers CURSOR FOR   
    SELECT name   
    FROM sys.triggers   
    WHERE OBJECT_NAME(parent_id) = @tableName  
    AND name LIKE '%_PGD_%' OR name LIKE '%PanguSync%'  
  
    OPEN curTriggers  
    FETCH NEXT FROM curTriggers INTO @triggerName  
  
    WHILE @@FETCH_STATUS = 0  
    BEGIN  
        SET @sql = 'DROP TRIGGER ' + QUOTENAME(@triggerName) + ';'  
        EXEC sp_executesql @sql  
        PRINT 'Trigger ' + @triggerName + ' dropped from ' + @tableName + '.'  
  
        FETCH NEXT FROM curTriggers INTO @triggerName  
    END  
  
    CLOSE curTriggers  
    DEALLOCATE curTriggers  
  
    -- 获取下一个表名  
    FETCH NEXT FROM curTables INTO @tableName  
END  
  
-- 关闭并释放游标  
CLOSE curTables  
DEALLOCATE curTables

相关推荐

  1. 增量数据库同步软件PanguSync侵入全面清理脚本

    2024-06-16 01:44:04       10 阅读
  2. PanguSync数据量初始化脚本

    2024-06-16 01:44:04       9 阅读
  3. 侵入智能指针和非侵入智能指针

    2024-06-16 01:44:04       26 阅读
  4. 侵入和非侵入式微服务框架的比较

    2024-06-16 01:44:04       35 阅读
  5. bat脚本sqlserver 不同数据库同步

    2024-06-16 01:44:04       37 阅读
  6. MOGDB/openGauss数据库gs dump备份脚本及备份清理

    2024-06-16 01:44:04       23 阅读
  7. nginx自动清理脚本

    2024-06-16 01:44:04       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 01:44:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 01:44:04       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 01:44:04       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 01:44:04       20 阅读

热门阅读

  1. LeetCode 596, 13, 2

    2024-06-16 01:44:04       11 阅读
  2. 【无标题】

    2024-06-16 01:44:04       7 阅读
  3. React Native 快速Demo(1)

    2024-06-16 01:44:04       8 阅读
  4. 【React】在 react 应用中,怎么使用useReducer

    2024-06-16 01:44:04       11 阅读
  5. 前端面试题日常练-day67 【面试题】

    2024-06-16 01:44:04       8 阅读
  6. IEEE会议论文LaTeX模板中添加页码

    2024-06-16 01:44:04       7 阅读
  7. C++之结构体初始化使用总结

    2024-06-16 01:44:04       8 阅读
  8. 盘点热门开源大模型

    2024-06-16 01:44:04       7 阅读
  9. Android 应用程序 ANR 问题分析总结

    2024-06-16 01:44:04       6 阅读
  10. 时钟和系统控制

    2024-06-16 01:44:04       7 阅读