<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [推薦] (SqlServer)批量清理指定數據庫中所有數據

      [推薦] (SqlServer)批量清理指定數據庫中所有數據

      ——通過知識共享樹立個人品牌。

       

          在實際應用中,當我們準備把一個項目移交至客戶手中使用時,我們需要把庫中所有表先前的測試數據清空,以給客戶一個干凈的數據庫,如果涉及的表很多,要一一的清空,不僅花費時間,還容易出錯以及漏刪,在這兒我提供了一個方法,可快捷有效的清空指定數據庫所有表的數據。僅供參考,歡迎交流不同意見。

       

      --Remove all data from a database

      SET NOCOUNT ON
      --Tables to ignore
      DECLARE @IgnoreTables 
              TABLE (TableName varchar(512))
      INSERT INTO @IgnoreTables (TableName) VALUES ('sysdiagrams')
      DECLARE @AllRelationships 
              TABLE (ForeignKey varchar(512)
                    ,TableName varchar(512)
                    ,ColumnName varchar(512)
                    ,ReferenceTableName varchar(512)
                    ,ReferenceColumnName varchar(512)
                    ,DeleteRule varchar(512))
      INSERT INTO @AllRelationships
      SELECT f.name AS ForeignKey,
      OBJECT_NAME(f.parent_object_id) AS TableName,
      COL_NAME(fc.parent_object_id,
      fc.parent_column_id) AS ColumnName,
      OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
      COL_NAME(fc.referenced_object_id,
      fc.referenced_column_id) AS ReferenceColumnName,
      delete_referential_action_desc as DeleteRule
      FROM sys.foreign_keys AS f
      INNER JOIN sys.foreign_key_columns AS fc
      ON f.OBJECT_ID = fc.constraint_object_id
       

      DECLARE @TableOwner varchar(512)
      DECLARE @TableName varchar(512)
      DECLARE @ForeignKey varchar(512)
      DECLARE @ColumnName varchar(512)
      DECLARE @ReferenceTableName varchar(512)
      DECLARE @ReferenceColumnName varchar(512)
      DECLARE @DeleteRule varchar(512)
       
       
      PRINT('Loop through all tables and switch all constraints to have a delete rule of CASCADE')
      DECLARE DataBaseTables0 
      CURSOR FOR 
      SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
      FROM sys.tables AS t;

      OPEN DataBaseTables0; 

      FETCH NEXT FROM DataBaseTables0 
      INTO @TableOwner,@TableName;

      WHILE @@FETCH_STATUS = 0
      BEGIN 
          IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
          BEGIN
              PRINT '['+@TableOwner+'].[' + @TableName + ']';

              DECLARE DataBaseTableRelationships CURSOR FOR 
              SELECT ForeignKey, ColumnName, ReferenceTableName, ReferenceColumnName
              FROM @AllRelationships 
              WHERE TableName = @TableName

              OPEN DataBaseTableRelationships;
              FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey@ColumnName@ReferenceTableName@ReferenceColumnName;

              IF @@FETCH_STATUS <> 0 
                  PRINT '=====> No Relationships' ; 

              WHILE @@FETCH_STATUS = 0
              BEGIN
                  PRINT '=====> switching delete rule on ' + @ForeignKey + ' to CASCADE';
                  BEGIN TRANSACTION
                  BEGIN TRY
                      EXEC('

                      ALTER TABLE [
      '+@TableOwner+'].[' + @TableName + ']
                       DROP CONSTRAINT 
      '+@ForeignKey+';

                      ALTER TABLE [
      '+@TableOwner+'].[' + @TableName + '] ADD CONSTRAINT
                      
      '+@ForeignKey+' FOREIGN KEY
                      (
                      
      '+@ColumnName+'
                      ) REFERENCES 
      '+@ReferenceTableName+'
                      (
                      
      '+@ReferenceColumnName+'
                      ) ON DELETE CASCADE;
                      
      ');
                      COMMIT TRANSACTION
                  END TRY
                  BEGIN CATCH
                      PRINT '=====> can''t switch ' + @ForeignKey + ' to CASCADE, - ' +
                      CAST(ERROR_NUMBER() AS VARCHAR+ ' - ' + ERROR_MESSAGE();
                      ROLLBACK TRANSACTION
                  END CATCH;
                  
                  FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey@ColumnName@ReferenceTableName@ReferenceColumnName;
              END;

              CLOSE DataBaseTableRelationships;
              DEALLOCATE DataBaseTableRelationships;

              END
              PRINT '';
              PRINT '';

              FETCH NEXT FROM DataBaseTables0 
              INTO @TableOwner,@TableName;
          END
      CLOSE DataBaseTables0;
      DEALLOCATE DataBaseTables0;

      PRINT('Loop though each table and DELETE All data from the table')

      DECLARE DataBaseTables1 CURSOR FOR 
      SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
      FROM sys.tables AS t;

      OPEN DataBaseTables1; 

      FETCH NEXT FROM DataBaseTables1 
      INTO @TableOwner,@TableName;

      WHILE @@FETCH_STATUS = 0
      BEGIN 
          IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
          BEGIN
              PRINT '['+@TableOwner+'].[' + @TableName + ']';
              PRINT '=====> deleting data from ['+@TableOwner+'].[' + @TableName + ']';
              BEGIN TRY
                  EXEC('
                       DELETE FROM [
      '+@TableOwner+'].[' + @TableName + ']
                       DBCC CHECKIDENT ([
      ' + @TableName + '], RESEED, 0)
                       
      ');
              END TRY
              BEGIN CATCH
                  PRINT '=====> can''t FROM ['+@TableOwner+'].[' + @TableName + '], - ' +
                        CAST(ERROR_NUMBER() AS VARCHAR+ ' - ' + ERROR_MESSAGE();
              END CATCH;
          END
           
          PRINT '';
          PRINT '';
           
          FETCH NEXT FROM DataBaseTables1 
          INTO @TableOwner,@TableName;
      END
      CLOSE DataBaseTables1;
      DEALLOCATE DataBaseTables1; 
       
      PRINT('Loop through all tables and switch all constraints to have a delete rule they had at the beggining of the task')

      DECLARE DataBaseTables2 CURSOR FOR 
      SELECT SCHEMA_NAME(t.schema_id) AS schema_name, t.name AS table_name
      FROM sys.tables AS t;
      OPEN DataBaseTables2; 

      FETCH NEXT FROM DataBaseTables2 
      INTO @TableOwner,@TableName;

      WHILE @@FETCH_STATUS = 0
      BEGIN
       
          IF (NOT EXISTS(SELECT TOP 1 1 FROM @IgnoreTables WHERE TableName = @TableName))
          BEGIN
          PRINT '['+@TableOwner+'].[' + @TableName + ']';

          DECLARE DataBaseTableRelationships CURSOR FOR 
          SELECT ForeignKey, ColumnName, ReferenceTableName, ReferenceColumnName, DeleteRule
          FROM @AllRelationships 
          WHERE TableName = @TableName

          OPEN DataBaseTableRelationships;
          FETCH NEXT FROM DataBaseTableRelationships INTO @ForeignKey@ColumnName@ReferenceTableName@ReferenceColumnName@DeleteRule;

          IF @@FETCH_STATUS <> 0 
          PRINT '=====> No Relationships' ; 

          WHILE @@FETCH_STATUS = 0
          BEGIN
              DECLARE @switchBackTo varchar(50=
              CASE 
                  WHEN @DeleteRule = 'NO_ACTION' THEN 'NO ACTION'
                  WHEN @DeleteRule = 'CASCADE' THEN 'CASCADE'
                  WHEN @DeleteRule = 'SET_NULL' THEN 'SET NULL'
                  WHEN @DeleteRule = 'SET_DEFAULT' THEN 'SET DEFAULT'
              END 

              PRINT '=====> switching delete rule on ' + @ForeignKey + ' to ' + @switchBackTo;

              BEGIN TRANSACTION
              BEGIN TRY
                  EXEC('

                  ALTER TABLE [
      '+@TableOwner+'].[' + @TableName + ']
                  DROP CONSTRAINT 
      '+@ForeignKey+';

                  ALTER TABLE [
      '+@TableOwner+'].[' + @TableName + '] ADD CONSTRAINT
                  
      '+@ForeignKey+' FOREIGN KEY
                  (
                  
      '+@ColumnName+'
                  ) REFERENCES 
      '+@ReferenceTableName+'
                  (
                  
      '+@ReferenceColumnName+'
                  ) ON DELETE 
      '+@switchBackTo+'
                  
      ');
                  
                  COMMIT TRANSACTION
              END TRY
              BEGIN CATCH
                  PRINT '=====> can''t change '+@ForeignKey + ' back to '+ @switchBackTo +', - ' +
                  CAST(ERROR_NUMBER() AS VARCHAR+ ' - ' + ERROR_MESSAGE();
                  ROLLBACK TRANSACTION
              END CATCH;

              FETCH NEXT FROM DataBaseTableRelationships 
              INTO @ForeignKey@ColumnName@ReferenceTableName@ReferenceColumnName@DeleteRule;
          END;

          CLOSE DataBaseTableRelationships;
          DEALLOCATE DataBaseTableRelationships;

          END
          PRINT '';
          PRINT '';

          FETCH NEXT FROM DataBaseTables2 
          INTO @TableOwner,@TableName;
      END
      CLOSE DataBaseTables2;

      DEALLOCATE DataBaseTables2;  

       

      posted @ 2012-01-17 08:51  .NET快速開發框架  閱讀(6616)  評論(49)    收藏  舉報
      主站蜘蛛池模板: 华人在线亚洲欧美精品| 亚洲大尺度无码无码专线| 精品少妇av蜜臀av| 午夜AAAAA级岛国福利在线| 精品国产一区二区三区麻豆| 日本xxxx色视频在线播放| 九色国产精品一区二区久久 | 日韩欧美精品suv| 一本大道色婷婷在线| 亚洲av无码成人精品区一区| 天天爽天天摸天天碰| 亚洲人成人一区二区三区| 亚洲午夜香蕉久久精品| 亚洲精品无amm毛片| 777米奇色狠狠888俺也去乱| 不卡在线一区二区三区视频| 中文字幕无码av不卡一区| 92精品国产自产在线观看481页| 少妇精品无码一区二区免费视频| 中文字幕人成无码免费视频| 狠狠色噜噜狠狠狠狠av不卡| 无码精品人妻一区二区三区湄公河| 国产成人久久精品一区二区| 国产午夜精品福利91| 久久国产精品成人影院| 亚洲v国产v天堂a无码二区| 国产免费久久精品44| 成人无码视频| 手游| 欧洲亚洲精品免费二区| 国产成人综合色视频精品| 欧美日韩性高爱潮视频| 日韩永久永久永久黄色大片| 中文无码av一区二区三区| 一区一区三区产品乱码| 老司机午夜精品视频资源| 国产免费性感美女被插视频| 国产精品不卡一二三区 | 亚洲精品美女一区二区| 又黄又爽又无遮挡免费的网站| 亚洲中文字幕精品无人区|