Удалить все таблицы, имена которых начинаются с определенной строки

Я решил эту проблему сортировки с ниже сценария

arrVals.sort(function(a, b){
    //return b.text - a.text;
    var AInt = parseInt(a.text, 10);
    var BInt = parseInt(b.text, 10);

    if ($.isNumeric(a.text) == false && $.isNumeric(b.text) == false) {
        var aA = a.text
        var bA = b.text;
        return aA > bA ? 1 : -1;
    } else if ($.isNumeric(a.text) == false) {  // A is not an Int
        return 1;    // to make alphanumeric sort first return -1 here
    } else if ($.isNumeric(b.text) == false) {  // B is not an Int
        return -1;   // to make alphanumeric sort first return 1 here
    } else {
        return AInt < BInt ? 1 : -1;
    }
});

Это отлично работает для хорошо смешанного массива .:)

Спасибо.

139
задан Blorgbeard 7 January 2013 в 21:12
поделиться

5 ответов

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

DECLARE @cmd varchar(4000)
DECLARE cmds CURSOR FOR
SELECT 'drop table [' + Table_Name + ']'
FROM INFORMATION_SCHEMA.TABLES
WHERE Table_Name LIKE 'prefix%'

OPEN cmds
WHILE 1 = 1
BEGIN
    FETCH cmds INTO @cmd
    IF @@fetch_status != 0 BREAK
    EXEC(@cmd)
END
CLOSE cmds;
DEALLOCATE cmds

Это более чисто, чем использование двухступенчатого подхода генерирует сценарий плюс выполнение. Но одно преимущество генерации скриптов состоит в том, что она дает Вам шанс рассмотреть полноту того, что будет выполненным, прежде чем она будет на самом деле выполнена.

я знаю, что, если бы я собирался сделать это против производственной базы данных, я был бы максимально осторожен.

Редактирование Пример кода зафиксирован.

142
ответ дан Filip Cornelissen 7 January 2013 в 21:12
поделиться
SELECT 'DROP TABLE "' + TABLE_NAME + '"' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'

Это генерирует сценарий.

Добавляющий пункт для проверки существования таблицы перед удалением:

SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '[prefix]%'
111
ответ дан CleanBold 7 January 2013 в 21:12
поделиться

Спасибо Curt, это - тот же вид решения, что я был на полпути через меня.

Ваш более хорош, чем мой, хотя - это предоставляет себя легкой модификации. Я добавил объединение к выбору и вытер некоторые представления также;)

declare @cmd varchar(4000)
declare cmds cursor for 
Select 'drop table [' + Table_Name + ']'
From    INFORMATION_SCHEMA.TABLES
Where   Table_Name like 'prefix%'
union
Select 'drop view [' + Table_Name + ']'
From    INFORMATION_SCHEMA.VIEWS
Where   Table_Name like 'prefix%'
open cmds
while 1=1
begin
    fetch cmds into @cmd
    if @@fetch_status != 0 break
    exec(@cmd)
end
close local
deallocate local

не волнуются, это не производственная база данных - это только для легкой очистки моего dev дб, в то время как я испытываю материал.

0
ответ дан Blorgbeard 7 January 2013 в 21:12
поделиться

Xenph Yan ответ был намного инструментом для очистки, чем мой, но здесь является моим все равно.

DECLARE @startStr AS Varchar (20)
SET @startStr = 'tableName'

DECLARE @startStrLen AS int
SELECT @startStrLen = LEN(@startStr)

SELECT 'DROP TABLE ' + name FROM sysobjects
WHERE type = 'U' AND LEFT(name, @startStrLen) = @startStr

Просто изменение tableName к символам, с которыми Вы хотите искать.

2
ответ дан Community 7 January 2013 в 21:12
поделиться
CREATE PROCEDURE usp_GenerateDROP
    @Pattern AS varchar(255)
    ,@PrintQuery AS bit
    ,@ExecQuery AS bit
AS
BEGIN
    DECLARE @sql AS varchar(max)

    SELECT @sql = COALESCE(@sql, '') + 'DROP TABLE [' + TABLE_NAME + ']' + CHAR(13) + CHAR(10)
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_NAME LIKE @Pattern

    IF @PrintQuery = 1 PRINT @sql
    IF @ExecQuery = 1 EXEC (@sql)
END
4
ответ дан Leon Bambrick 7 January 2013 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: