Как быстро заполнить таблицу 1 000 000 ТЕСТОВЫХ записей?
Создадим таблицу samples с точно такой же структурой, что и таблица tests . Заполним ее 10 тестовыми записями.
CREATE TABLE samples ( title varchar(256) NOT NULL ); INSERT INTO samples (title) VALUES ('8iRDgsEIq4GmOs32FnHM3b3cH60n3mm8070'), ('UAmsXyrKgApfHMyV2kUrYqLphN99Q7TJSoe'), ('OX1qiFeTigcOTO5JVvgFk7MRDgjgatkTqwL'), ('CT9Kfbplp4QC87G32UIKlkGd31jdjt4qH4f'), ('WsAhjBL5tAgihYZBtX97FNUmEpXavhb4CRw'), ('LwaitJ5dieXyixEmjJXhhqDY8Zg9Tu5ecoV'), ('KpHsnqrcMCpkRxkGNMjEJV0jFaeucPtbLWe'), ('t2GSIDOvW14eMlroAWrRR6xU5DoeNUXY0lD'), ('rSvrEPxR8rcw7QYjXfeNdyf3LpqYNHu3W7a'), ('6liUHPkjnygSatoUB4juZ5TaJZjaxHpR4BL');
Для того, чтобы превратить 10 записей из таблицы samples в 1 000 000 записей произведем самообъединение таблицы samples шесть раз
SELECT fst.title FROM samples AS fst, samples AS snd, samples AS thd, samples AS fth, samples AS fif, samples AS sth;
Оператор JOIN, который в SQL может быть заменен обычной запятой, осуществляет декартово соединение таблиц, когда каждой записи одной таблицы сопоставляется каждая запись другой таблицы. Таким образом, если в одной таблице 10 записей и в другой таблице 10 записей, результирующая таблица, полученная их соединением через JOIN будет содержать 100 записей. Как нетрудно увидеть
10 x 10 x 10 x 10 x 10 x 10 = 1 000 000 записей
Если в таблице samples будет 100 записей, для получения 1 000 000 записей будет достаточно соединений трех таких таблиц, если в samples будет 1000 записей, будет достаточно объединить таблицу саму с собой один раз.
Вставить результат в целевую таблицу tests можно при помощи оператора INSERT . SELECT .
INSERT INTO tests SELECT fst.title FROM samples AS fst, samples AS snd, samples AS thd, samples AS fth, samples AS fif, samples AS sth;
Как занести тестовые данные в таблицу SQL Server
1. Вставка N строк — делаем цикл while и внутри insert.
2. Для заполнения значения по внешнему ключу необходимо выбрать случайную строку из родительской таблицы:
(SELECT TOP 1 id FROM tst_customers ORDER BY NEWID())
3. Получение случайного числа от 0 до N:
select rand()* 100000, cast(rand()* 100 as int)
4. Получение случайной даты (от 0 до N дней назад)
dateadd(day, - rand()*1000, getdate())
5. Генерация случайной строки:
select left(NEWID(),7)
Таким нехитрым способом можно очень быстро занести в таблицу любое количество строк.11
Основы T-SQL. DML
Для добавления данных применяется команда INSERT , которая имеет следующий формальный синтаксис:
INSERT [INTO] имя_таблицы [(список_столбцов)] VALUES (значение1, значение2, . значениеN)
Вначале идет выражение INSERT INTO , затем в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.
Например, пусть ранее была создана следующая база данных:
CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL )
Добавим в нее одну строку с помощью команды INSERT:
INSERT Products VALUES ('iPhone 7', 'Apple', 5, 52000)
После удачного выполнения в SQL Server Management Studio в поле сообщений должно появиться сообщение «1 row(s) affected»:

Стоит учитывать, что значения для столбцов в скобках после ключевого слова VALUES передаются по порядку их объявления. Например, в выражении CREATE TABLE выше можно увидеть, что первым столбцом идет Id. Но так как для него задан атрибут IDENTITY, то значение этого столбца автоматически генерируется, и его можно не указывать. Второй столбец представляет ProductName, поэтому первое значение — строка «iPhone 7» будет передано именно этому столбцу. Второе значение — строка «Apple» будет передана третьему столбцу Manufacturer и так далее. То есть значения передаются столбцам следующим образом:
- ProductName: ‘iPhone 7’
- Manufacturer: ‘Apple’
- ProductCount: 5
- Price: 52000
Также при вводе значений можно указать непосредственные столбцы, в которые будут добавляться значения:
INSERT INTO Products (ProductName, Price, Manufacturer) VALUES ('iPhone 6S', 41000, 'Apple')
Здесь значение указывается только для трех столбцов. Причем теперь значения передаются в порядке следования столбцов:
- ProductName: ‘iPhone 6S’
- Manufacturer: ‘Apple’
- Price: 41000
Для неуказанных столбцов (в данном случае ProductCount) будет добавляться значение по умолчанию, если задан атрибут DEFAULT, или значение NULL. При этом неуказанные столбцы должны допускать значение NULL или иметь атрибут DEFAULT.
Также мы можем добавить сразу несколько строк:
INSERT INTO Products VALUES ('iPhone 6', 'Apple', 3, 36000), ('Galaxy S8', 'Samsung', 2, 46000), ('Galaxy S8 Plus', 'Samsung', 1, 56000)
В данном случае в таблицу будут добавлены три строки.
Также при добавлении мы можем указать, чтобы для столбца использовалось значение по умолчанию с помощью ключевого слова DEFAULT или значение NULL:
INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ('Mi6', 'Xiaomi', DEFAULT, 28000)
В данном случае для столбца ProductCount будет использовано значение по умолчанию (если оно установлено, если его нет — то NULL).
Если все столбцы имеют атрибут DEFAULT, определяющий значение по умолчанию, или допускают значение NULL, то можно для всех столбцов вставить значения по умолчанию:
INSERT INTO Products DEFAULT VALUES
Но если брать таблицу Products, то подобная команда завершится с ошибкой, так как несколько полей не имеют атрибута DEFAULT и при этом не допускают значение NULL.
Создание таблиц (ядро СУБД)
Вы можете создать новую таблицу, присвоить ей имя и добавить ее в существующую базу данных с помощью конструктора таблиц в SQL Server Management Studio (SSMS) или Transact-SQL.
Разрешения
Эта задача требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица.
Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных CLR, необходимо быть владельцем данного типа либо иметь разрешение REFERENCES на него.
Если какие-либо столбцы в инструкции CREATE TABLE имеют связанную коллекцию схем XML, необходимо быть владельцем этого набора схем или иметь разрешение REFERENCES на него.
Использование конструктора таблиц в SQL Server Management Studio
- В SSMS в обозревателе объектовподключитесь к экземпляру Компонент Database Engine , который содержит изменяемую базу данных.
- В обозревателе объектовразверните узел Базы данных , а затем базу данных, в которой будет размещена новая таблица.
- В обозреватель объектов щелкните правой кнопкой мыши узел Таблицы базы данных и выберите Создать таблицу.
- Введите имена столбцов, выберите типы данных и определите для каждого столбца, могут ли в нем присутствовать значения NULL, как показано на следующей иллюстрации:
- Чтобы указать дополнительные свойства столбца, например идентификатор или вычисляемые значения столбца, выберите столбец и на вкладке свойства столбца выберите соответствующие свойства. Дополнительные сведения о свойствах столбца см. в разделе Свойства столбца таблицы (SQL Server Management Studio).
- Чтобы указать, что столбец является столбцом первичного ключа, щелкните его правой кнопкой мыши и выберите Задать первичный ключ. Дополнительные сведения см. в статье Create Primary Keys.
- Чтобы создать связи по внешнему ключу, проверочные ограничения или индексы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите в списке объект, как показано на следующей иллюстрации: Дополнительные сведения об этих объектах см. в разделах Create Foreign Key Relationships, Create Check Constraints и Indexes.
- По умолчанию таблица содержится в схеме dbo . Чтобы указать другую схему для таблицы, щелкните правой кнопкой мыши панель конструктора таблиц и выберите Свойства , как показано на следующей иллюстрации. Выберите нужную схему из раскрывающегося списка Схема . Дополнительные сведения о схемах см. в разделе Create a Database Schema.
- В меню Файл выберите Сохранитьимя таблицы.
- В диалоговом окне Выбор имени введите имя таблицы и нажмите кнопку ОК.
- Чтобы просмотреть новую таблицу, в обозревателе объектовразверните узел Таблицы , а затем нажмите клавишу F5 , чтобы обновить список объектов. Новая таблица будет отображена в списке таблиц.
Использование Transact-SQL
- В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
CREATE TABLE dbo.PurchaseOrderDetail ( PurchaseOrderID INT NOT NULL, LineNumber SMALLINT NOT NULL, ProductID INT NULL, UnitPrice MONEY NULL, OrderQty SMALLINT NULL, ReceivedQty FLOAT NULL, RejectedQty FLOAT NULL, DueDate DATETIME NULL );