亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

批量清理指定數據庫中所有數據--SqlServer

系統 2882 0

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

?

-- 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; ??

?

? 2011?? EricHu

原創作品,轉貼請注明作者和出處,留此信息。

?

------------------------------------------------

cnBlobs: http://www.cnblogs.com/huyong/
CSDN http://blog.csdn.net/chinahuyong ?

批量清理指定數據庫中所有數據--SqlServer


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美成人香蕉网在线观看 | aⅴ在线免费观看 | 香蕉成人啪国产精品视频综合网 | 亚洲干综合| 国产精亚洲视频 | 国产精品爱久久久久久久 | 久久99国产综合精品 | 中日韩欧美中文字幕毛片 | 毛片网站在线 | 国产精品久久久久鬼色 | 国产在线短视频 | 手机在线看片国产日韩生活片 | 极品粉嫩粉嫩福利视频在线 | 国产一区二区免费播放 | 国产日韩欧美亚洲精品95 | 99热这里只有精品首页 | 天天操天天干天天爽 | 亚洲国产精品毛片∧v卡在线 | 狠狠躁夜夜躁人人爽天天miya | 精品国产品国语在线不卡丶 | 草草免费视频 | 国产成人啪午夜精品网站男同 | 欧美日日 | 99精品视频在线成人精彩视频 | 色偷偷尼玛图亚洲综合 | 国产成人亚洲综合无 | 在线国产欧美 | www.黄色片| 久久综合97色综合网 | 亚洲第一成年网 | 日韩性大片免费 | 一级毛片在线 | 在线观看 日韩 | 午夜精品久久久久久久99热 | 精品国产线拍大陆久久尤物 | 一级毛片日韩a欧美视频 | 国产一久久香蕉国产线看观看 | 国产精品一区久久 | 中文字幕国产在线 | 中文在线日韩 | 涩涩免费视频 |