SQL для удаления таблиц, который начинается с общего префикса - PullRequest
1 голос
/ 22 марта 2019

Я ищу написать запрос / хранимую процедуру SQL, которая удаляла бы таблицы в БД, начинающиеся с общего префикса, такого как «таблица».

Однако имена таблиц начинаются с префикса, следующего зачисло, и я не хочу удалять их все, если бы я мог добавить номера таблиц к префиксу.

Спасибо

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Найти все таблицы, где столбец похож:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%SubId%'
ORDER BY    TableName
            ,ColumnName;

Найти все таблицы, где имя таблицы, например:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       t.name LIKE '%tbl%'
ORDER BY    TableName
            ,ColumnName;

Найти все таблицы в определенной схеме:

SELECT t.name 
  FROM sys.tables AS t
  INNER JOIN sys.schemas AS s
  ON t.[schema_id] = s.[schema_id]
  WHERE s.name = N'cmc';

Когда у вас есть таблицы, которые нужно удалить, вы можете просто написать операторы удаления для каждой из них. Или вы можете использовать что-то вроде следующего:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName',
            'drop table ' + t.name
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       t.name LIKE '%tbl%'
ORDER BY    TableName
            ,ColumnName;

EDIT

Ниже выбора с чуть более подробной информацией о предложении where:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'          
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       
            t.name LIKE 'tbl%' -- where the table name starts with the letters 'tbl'
            OR t.name LIKE 'tbl%123%' -- where the table name starts with the letters 'tbl' and has the numbers '123' in the table name
            OR c.name LIKE '%colName%' -- where a column has a name that contains the letters 'colName'

ORDER BY    TableName
            ,ColumnName;
1 голос
/ 22 марта 2019

Найдите все имена таблиц, которые начинаются с вашего префикса и создают , динамически отбрасывают запрос и вставляют результат в таблицу temp следующим образом:

DECLARE @YourPrefix VARCHAR(MAX) = 'table'
SELECT    
    'DROP TABLE ' + t.name AS DropQuery
INTO #TMP
FROM        
      sys.tables  t   
WHERE
    t.name LIKE @YourPrefix + '%'

Напишите курсор в таблице временных значений и используйте sp_executesql для выполнения запроса на удаление таким образом.

DECLARE @Query NVARCHAR(MAX) = NULL
DECLARE C CURSOR FOR
    SELECT 
        T.DropQuery 
    FROM 
        #TMP T
OPEN C
WHILE 1=1
BEGIN
    FETCH NEXT FROM C INTO @Query
    IF @@FETCH_STATUS <> 0 BREAK;
    EXEC sp_executesql @Query
END
CLOSE C
DEALLOCATE C

Он удаляет все таблицы, начинающиеся с вашего префикса.

1 голос
/ 22 марта 2019

посмотрите на это: Получите имена таблиц, используя инструкцию SELECT в MySQL

, вы можете присоединиться к этой таблице с ограничениями на префикс таблицы

надеюсь, что это поможет и весело проведет время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...