מחיקת כול הטבלאות מבסיס נתונים Sql

שלום לכולם,

לאחרונה נתקלתי בבקשה מוזרה מעט, נתבקשתי למחוק את כול הטבלאות מתוך בסיס נתונים של Sql Server.

למה? הסיבה אפילו מוזרה יותר – ללקוח יש מערכת שמייצרת את כול הטבלאות, אבל לא בדקה האם הן קיימות לפני, היות וזה ממש לא חשוב אם הן קיימות או לא מבחינת המערכת, פשוט היה צריך לוודא שבמידה וקיימות, להעיף את כולן.

אז כתבתי קצת קוד שמבצע בדיוק את זה.

הקוד יכול להדפיס את הבקשות, או לבצע אותן, פשוט מעבירים את ההערה משורה 22 לשורה 23 ואז הקוד יתבצע במקום להיות מודפס.

הקוד מתחשב גם בScheme של הטבלה ולא עובד רק עם dbo אז הוא יעבוד עם כול בסיס נתונים שלכם.

הקוד נבדק על Sql 2005 בלבד

   1: DECLARE @dropSql nvarchar(1000)

   2: DECLARE DropSequence CURSOR LOCAL FAST_FORWARD

   3:

   4: FOR

   5:     SELECT

   6:         N'DROP TABLE ' + QUOTENAME(TABLE_SCHEMA) + N'.' + QUOTENAME(TABLE_NAME)

   7:     FROM

   8:         INFORMATION_SCHEMA.TABLES

   9:     WHERE

  10:         TABLE_TYPE = 'BASE TABLE'

  11:             AND

  12:         OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + N'.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0

  13:

  14:     OPEN DropSequence

  15:     WHILE 1 = 1

  16:         BEGIN

  17:             FETCH NEXT FROM DropSequence INTO @dropSql

  18:

  19:                 IF @@FETCH_STATUS <> 0 BREAK

  20:                     RAISERROR (@dropSql , 0, 1) WITH NOWAIT

  21:

  22:             --EXEC(@dropSql )

  23:             PRINT @dropSql

  24:         END

  25:

  26: CLOSE DropSequence

  27: DEALLOCATE DropSequence