欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2924 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元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 午夜成人免费视频 | 亚洲视频在线观看 | 国产黄色网址在线观看 | 欧美黄色网 | 五月婷婷天堂 | 草久在线观看视频 | 日韩在线一区二区三区 | 男女性爽大片在线观看 | 性xx视频 | 久本草在线中文字幕亚洲欧美 | 91福利国产在线观看网站 | 久草新| 久久久久久久免费视频 | 亚洲人xxxx | 91视频导航 | 国产操片 | 九二淫黄大片看片 | 在线观看国产免费高清不卡 | 999成人网 | 毛片免费观看 | 中国大陆高清aⅴ毛片 | 国产亚洲综合视频 | 国产精品无码2021在线观看 | www.毛片 | 欧美成a人片在线观看 | 成人在线免费视频观看 | 天天干天天添 | 久久在视频| 久久6699精品国产人妻 | 午色影院 | 最新国产视频 | 人人天天操 | 97骚碰| 日本视频在线播放 | 久草在线综合 | 九九热视频免费 | 美女国产一区 | 天天摸天天爽天天澡视频 | 青娱乐免费视频观看 | 亚洲成人av在线 | 蜜桃精品久久久久久久免费影院 |