黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

批量清理指定數(shù)據(jù)庫(kù)中所有數(shù)據(jù)--SqlServer

系統(tǒng) 3390 0

在實(shí)際應(yīng)用中,當(dāng)我們準(zhǔn)備把一個(gè)項(xiàng)目移交至客戶手中使用時(shí),我們需要把庫(kù)中所有表先前的測(cè)試數(shù)據(jù)清空,以給客戶一個(gè)干凈的數(shù)據(jù)庫(kù),如果涉及的表很多,要一一的清空,不僅花費(fèi)時(shí)間,還容易出錯(cuò)以及漏刪,在這兒我提供了一個(gè)方法,可快捷有效的清空指定數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)。僅供參考,歡迎交流不同意見。

?

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

原創(chuàng)作品,轉(zhuǎn)貼請(qǐng)注明作者和出處,留此信息。

?

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

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

批量清理指定數(shù)據(jù)庫(kù)中所有數(shù)據(jù)--SqlServer


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論