Мне нужно создать поддельные данные в таблицу fakeData
которая следует за этим psuedocode:
foreach(t1.id in table1)
foreach(t2.id in table2)
foreach(t3.id in table3)
INSERT INTO fakeData (t1.id, t2.id, t3.id, random(30,80))
Где id является первичным ключом этой таблицы.
Мне нужно сделать это как можно быстрее, потому что я планирую вставить миллиарды записей. Я не уверен, что использование SQL для выполнения инструкций является лучшим методом или использованием c # или наилучшим вариантом для получения этих данных в таблице.
Этот вопрос действительно состоит из двух частей: как я могу выполнить psuedocode в SQL Server, и что это лучший способ сделать это очень быстро. (У меня нет настроек индексов)
Это может показаться дубликатом всего остального «Самый быстрый способ для массовой вставки». Я думаю, что этот вопрос отличается от того, что данные, которые я загружаю, могут быть сгенерированы на моем SQL Server, поэтому BULK генерирует по сравнению с BULK INSERT
PS: Я получил SQL Server 2012
Изменить: Больше данных
Это звездная схема. fakeData будет таблицей фактов.
table2 - это размер даты 20 лет с 7300 записями. table3 - это размер времени 96 записей. table1 - еще одно измерение с 100 миллионами записей.
Хорошо, хорошо ... Поскольку никто действительно не показывал, как делать случайные значения. Я до сих пор вносил свой вклад в решение. Я делаю это прямо сейчас, вместе с моделью восстановления просто:
BEGIN TRAN
declare @x int = 1
while @x <= 5000
begin
INSERT INTO dimSpeed
Select T1.id as T1ID, T2.DateValue as T2ID, T3.TIME_ID as T3ID, ABS(Checksum(NewID()) % 70) + 20
From lines T1, dimDate T2, dimTime T3
WHERE T1.id = @x AND T2.DateValue > '1/1/2015' AND T2.DateValue < '1/1/2016'
if (@x % 100) = 0
begin
COMMIT TRAN
BEGIN TRAN
end
set @x = @x + 1
end
COMMIT TRAN
Где 5000
- сколько элементов TABLE1 (t1), которые я вставляю. Выполнение всего 5000 занимает 5 минут или около того. При такой ставке потребуется 70 дней, чтобы вставить все необходимые мне данные. Требуется более быстрый вариант