it-swarm.asia

كيفية إسقاط جداول متعددة ببادئة مشتركة في استعلام واحد؟

أستخدم Microsoft SQL Server 2008 ، وسؤالي هو: كيفية إسقاط جداول متعددة ببادئة شائعة في استعلام واحد؟

شيء من هذا القبيل أسماء الجدول:

LG_001_01_STLINE, 
LG_001_02_STFICHE
17
Cell-o

يمكنك إنشاء سلسلة باستخدام طرق عرض الكتالوج ، على سبيل المثال:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += '
DROP TABLE ' 
    + QUOTENAME(s.name)
    + '.' + QUOTENAME(t.name) + ';'
    FROM sys.tables AS t
    INNER JOIN sys.schemas AS s
    ON t.[schema_id] = s.[schema_id] 
    WHERE t.name LIKE 'LG_001%';

PRINT @sql;
-- EXEC sp_executesql @sql;

بالطبع هناك مسكّرات محتملة ، على سبيل المثال إذا كانت هذه الجداول لها علاقات مفتاح خارجي ، فسوف تحتاج إما إلى إسقاطها أولاً ، أو ترتيب الإخراج لإسقاط الجداول بترتيب معين.

للحصول على قائمة الجداول ، استخدم:

SELECT s.name, t.name 
  FROM sys.tables AS t 
  INNER JOIN sys.schemas AS s 
  ON t.[schema_id] = s.[schema_id] 
  WHERE t.name LIKE 'LG_001%';
34
Aaron Bertrand

لقد قمت بتشغيل هذا الاستعلام ثم لصق النتائج مرة أخرى في نافذة الاستعلام لإسقاط جميع الجداول:

SELECT 'DROP TABLE ' + NAME from sys.tables
ORDER BY NAME

إذا كنت تريد حذف جميع الجداول مع الاحتفاظ بالأسماء التي تبدأ بالحرف A أو B أو C أو D:

SELECT 'DROP TABLE ' + NAME from sys.tables
WHERE NAME NOT LIKE '[ABCD]%'
GROUP BY NAME
4
Mike