Создайте количество новых строк в БД SQL Server с нулевыми значениями - PullRequest
0 голосов
/ 25 апреля 2019

Я хотел бы создать набор новых строк в БД, где ID = = 10,11,12,13,14,15, но все остальные значения равны нулю.Предполагается, что строки с 1 по 9 уже существуют (в этом примере).Мое приложение установит параметры первой и последней строки.

Вот мой запрос на создание одной строки, но мне нужен способ циклически проходить по строкам с 10 по 15, пока не будут созданы все пять строк:

        @FirstRow int = 10 --will be set by application
        ,@LastRow int = 15 --will be set by application
        ,@FileName varchar(100) = NULL
        ,@CreatedDate date = NULL
        ,@CreatedBy varchar (50) = NULL   

AS
BEGIN
        INSERT INTO TABLE(TABLE_ID, FILENAME, CREATED_BY, CREATED_DATE)
        VALUES (@FirstRow, @FileName, @CreatedBy, @CreatedDate)
END

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

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Если у вас нет таблицы чисел, как упомянуто SMor, вы можете использовать специальную таблицу подсчета

* ** 1003 тысяча два * Пример
Declare @FirstRow int = 10 --will be set by application
       ,@LastRow int = 15 --will be set by application
       ,@FileName varchar(100) = NULL
       ,@CreatedDate date = NULL
       ,@CreatedBy varchar (50) = NULL   


INSERT INTO TABLE(TABLE_ID, FILENAME, CREATED_BY, CREATED_DATE)
Select Top (@LastRow-@FirstRow+1) 
        @FirstRow-1+Row_Number() Over (Order By (Select NULL)) 
       ,@FileName
       ,@CreatedBy
       ,@CreatedDate
 From   master..spt_values n1, master..spt_values n2

Сгенерированные данные

enter image description here

1 голос
/ 25 апреля 2019

Предполагая, что строки, которые вы вставляете, всегда последовательны, вы можете использовать цикл гетто FOR, подобный приведенному ниже, для достижения вашей цели:

--put all the other variable assignments above this line
DECLARE @i int = @FirstRow

WHILE (@i <= @LastRow)
BEGIN
    INSERT INTO TABLE(TABLE_ID, FILENAME, CREATED_BY, CREATED_DATE)
    VALUES (@i, @FileName, @CreatedBy, @CreatedDate)
    SET @i = @i + 1;
END

По сути, мы присвоили @i наименьшему индексуи затем просто перебирайте одну за другой, пока мы не достигнем максимального индекса.

Если производительность является проблемой, описанный выше подход не будет идеальным.

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