mssql удалить все таблицы из базы данных

Вот скрипт для удаления всех таблиц из бд для mssql

USE [DATA-BASE-NAME]
GO
 declare @i int
 set @i = 0
 while (@i<99)
 begin
 declare @table_name varchar(100)
 declare table_list cursor for
 select name from sysobjects o2 where xtype='U' and
 not exists (
 select * from sysforeignkeys k
 join syscolumns c1 on (k.fkeyid = c1.id and c1.colid=k.fkey)
 join syscolumns c2 on (k.rkeyid = c2.id and c2.colid=k.rkey)
 where c2.id = o2.id and c1.id <> o2.id
 )
 open table_list
 fetch next from table_list into @table_name
 while @@fetch_status = 0
 begin
 print 'dropping table '+@table_name
 exec ('drop table '+@table_name)
 fetch next from table_list into @table_name
 end
 close table_list
 deallocate table_list
 set @i = @i+1
 end
GO

Тест производительности SQL Azure vs SQL Server vs Table Storage

В процессе подбора оптимального хранилища я прочитал много статей в которых говорилось что SQL Azure работает значительно медленнее чем Table Storage и медленнее чем SQL Server. Но никаких цифр я не нашёл, по этому решил все таки проверить с какой скоростью на самом деле работают SQL Azure и Table Storage, и для сравнения я взял SQL Server 2008 R2 Express.
Результаты оказались достаточно интересные, для теста я взял простой класс, для Table Storage:

public class lTEST : TableServiceEntity
{
public lTEST()
: base()
{
}
public lTEST(string partitionKey, string rowKey)
: base(partitionKey, rowKey)
{
}
public int TEST0 { get; set; }
public string TEST1 { get; set; }
public string TEST2 { get; set; }
public string TEST3 { get; set; }
public string TEST4 { get; set; }
public double TEST5 { get; set; }
public DateTime TEST6 { get; set; }
public int TEST7 { get; set; }
public double TEST8 { get; set; }
public bool TEST9 { get; set; }
public string TEST10 { get; set; }
}


А для SQL:

create table sqlTEST
(
TEST0 int IDENTITY(1,1) NOT NULL PRIMARY KEY,
TEST1 nvarchar(400),
TEST2 nvarchar(400),
TEST3 ntext,
TEST4 ntext,
TEST5 decimal,
TEST6 datetime,
TEST7 int,
TEST8 decimal,
TEST9 bit,
TEST10 ntext,
)

 

Заполнение для Table:

for (int i = 0; i < 1000; i++)
{
lTEST ltestItem = new lTEST("testpk",i.ToString());
ltestItem.TEST0 = 0;
ltestItem.TEST1 = new string('A', 100);
ltestItem.TEST2 = new string('B', 100);
ltestItem.TEST3 = new string('C', 100);
ltestItem.TEST4 = new string('D', 100);
ltestItem.TEST5 = 50;
ltestItem.TEST6 = System.DateTime.Now;
ltestItem.TEST7 = 50;
ltestItem.TEST8 = 432.32;
ltestItem.TEST9 = true;
ltestItem.TEST10 = new string('D', 100);
TableHelper.InsertEntity("test", ltestItem);
}

 

Для SQL:
 

for (int i = 0; i < 1000; i++)
{
SqlTEST ltestItem = new SqlTEST();
// ltestItem.TEST0 = 0;
ltestItem.TEST1 = new string('A', 100);
ltestItem.TEST2 = new string('B', 100);
ltestItem.TEST3 = new string('C', 100);
ltestItem.TEST4 = new string('D', 100);
ltestItem.TEST5 = 50;
ltestItem.TEST6 = System.DateTime.Now;
ltestItem.TEST7 = 50;
ltestItem.TEST8 = 432.32;
ltestItem.TEST9 = true;
ltestItem.TEST10 = new string('D', 100);
sem.Add(ltestItem);
}
sem.SaveChanges();


 

Стоит сказать что для доступа к базам я использую Telerik Open Access.
Тестировал я таким образом, поочередно в цикле for добавлял записи в Table Storage, SQL Azure и SQL Server.
После создание всех записей, я их вычитывал из хранилищ.
По заверении, я удалял все записи из баз данных.
По чему у SQL серверов по 2 записи времени? В первой записи я делаю SaveChanges() сразу после добавления элемента, во втором – после выхода из цикла. Для 10000 я делаю сохранение данных в SQL каждые 1000 элементов, иначе сервер закрывает подключение из за превышение интервала ожидания. Все это я делал в одном потоке, поочередно.


Перейдем к результатам:

Хранилище

Кол-во записей

Время записи

Время чтения

Время удаления

Table Storage

10

    963 ms.

 1 871 ms.

 

SQL Azure

10

  3 205 ms.

   252 ms.

   367 ms.

SQL Server 2008 R2 Express

10

  1 082 ms.

   402 ms.

   167 ms.

 

 

 

 

 

Table Storage

100

  5 619 ms.

 2 564 ms.

 

SQL Azure

100

 37 479 ms.

  9 138 ms.

 4 531 ms.

 2 312 ms.

SQL Server 2008 R2 Express

100

 10 295 ms.

  5 286 ms.

   573 ms.

   569 ms.

 

 

 

 

 

Table Storage

1000

 65 177 ms.

 9 718 ms.

 

SQL Azure

1000

274 685 ms.

109 021 ms.

10 233 ms.

11 649 ms.

SQL Server 2008 R2 Express

1000

105 843 ms.

 56 938 ms.

 1 528 ms.

 4 114 ms.

 

 

 

 

 

Table Storage

10000

576 184 ms.

46 790 ms.

 

SQL Azure

10000

951 458 ms.

44 058 ms.

 

SQL Server 2008 R2 Express

10000

551 167 ms.

 9 333 ms.

 

 

 

 

 

 

Итого:

 

 

 

 

Table Storage

В среднем

  58,32 ms.

  5.49 ms.

 

SQL Azure

В среднем

  96,02 ms.

  5.31 ms.

 

SQL Server 2008 R2 Express

В среднем

  55,30 ms.

  1.06 ms.

 

Таким образом понятно что Table Storage работает явно быстрее чем SQL Azure. Но Sql Server 2008 R2 Express - быстрее всех.

Описание Windows Azure Storage и Azure SQL

В Windows Azure есть 3 места для хранения данных данных:


Storage
    Blob – хранилище больших элементов данных.
    Table – структурированное хранилище состояний сервиса, табличные данные без связей.
    Queue – короткие сообщения которые обеспечивает диспетчеризацию асинхронных заданий для реализации обмена данными между сервисами.
Azure SQL
     Реляционная база данных.
Driver
     Жесткий диск в формате NTFS.
 
Рассмотрим подробнее каждый их них.
Storage – общее название для Blob, Table и Queue  - все они создаются в «общем контейнере».

Доступ к ним осуществляется по адресам:
http://appname.blob.core.windows.net/<containerName>/<blobName>  для  блобов.
http://appname.table.core.windows.net/<TableName>  для таблиц.
http://appname.queue.core.windows.net/<QueueName>  для очередей.

Предназначение:

Blob – нужен для хранения больших объёмов данных, скажем видео, фото, файлов и тому подобное. Blob есть двух типов:
    1. Block Blobs – до 200 GB
    2. Page Blobs – до 1 TB.
С blob могут быть ассоциированы метаданные, которые задаются в виде пар <имя, значение> и могут достигать размера 8КБ для blob. Метаданные blob могут быть получены и заданы отдельно от данных blob.
Каждый blob должен храниться в контейнере.
У blob есть ограничения на размер загружаемого файла в 64 мб. Если размер вашего файла превышает 64 мегабайта, тогда необходимо загружать файл частями. Частями до 64 МБ каждый.

Table – хранилище структурированных данных. Одна запись может иметь до 255 свойств  (включая обязательные системные свойства: PartitionKey, RowKey и Timestamp) размер каждого свойства не может превышать 64 КБ, а суммарный размер строки не может превышать 1 МБ. Таблица (Table) – содержит набор записей. Вы можете создать любое количество таблиц.
Обязательные поля для таблицы:
    1. Ключ секции (PartitionKey) – Раздел таблицы.
    2. Ключ строки (RowKey) – Это уникальный ID сущности в рамках секции. PartitionKey в сочетании с RowKey уникально идентифицирует сущность в таблице.
    3. Временная метка (Timestamp) – Время создания или изменения, необходима для синхронизации и прочих операций.

Типы данных: PartitionKey и RowKey должны иметь тип строки и остальные свойства может быть любой из следующих типов: Binary, Bool, DateTime, Double, GUID, Int, Int64, String.

Queue – очередь содержит сообщения размер до 8КБ каждое, общее количество сообщений в очереди не ограничено. Единственное ограничение в 100 TB на размер всей очереди.

Параметры и ограничения для всего Storage:
    Вместимость - до 100 ТБ.
    Общее количество операций - до 5000 entities/messages/blobs в секунду.
    Пропускная способность - до 3 гигабит в секунду.
    Для одной очереди (Queue) - До 500 сообщений в секунду.
    Для одного раздела таблицы (Partition Table) – Для одного раздела пропускная способность составляет 500 операций в секунду. Стоит отметить что ограничение действует именно для одно раздела (Partition) а не для всей таблицы в целом.
    Для одного Blob - пропускная способность составляет до 60 Мб / сек.

 

В случае превышения лимита вы получите от сервера ошибку "503 server busy"

Azure SQL – реляционная база данных. База данных Web Edition позволяет хранить до 5 ГБ данных, база данных Business Edition позволяет хранить до 150 ГБ.
По скорости работы SQL Azure уступает Storage.

Driver – виртуальный жесткий диск с файловой системой NTFS. 

Ссылки:
http://msdn.microsoft.com/ru-ru/library/ee872420.aspx - Blob
http://msdn.microsoft.com/ru-ru/library/ee872426.aspx - Table
http://msdn.microsoft.com/ru-ru/library/ee872424.aspx - Queue
http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/.... - описание Storage