Вставить несколько строк в таблицу базы данных, используя T-SQL - PullRequest
1 голос
/ 25 мая 2011

Я хочу создать оператор SQL (возможно, хранимую процедуру) для вставки нескольких строк в таблицу базы данных.Для дат в одном году, в зависимости от выбранного номера недели.

Например: если выбран номер недели = 4

Оператор sql должен вставить новые строки в базу данныхТаблица для текущей даты, добавляющая 4 недели к текущей дате для каждой строки, выглядит следующим образом:

CompanyID  DateStart                  ServiceType

101       todayDate                     0091
101       TodayDate + 4weeks            0091
101       TodayDate + 8weeks            0091
101       TodayDate + 12weeks           0091
.               .                          .
.               .                          .
.               .                          .
101       TodayDate + #weeks            0091
            (until this yearEnd only)

** Обратите внимание:

1.Перед выполнением вышеуказанного сценария я хочу проверить, есть ли какие-либо записи в той же таблице базы данных за предыдущий год для компании (# 101), serviceType (# 0091).Если какие-либо записи существуют, я хочу удалить эти записи.

2.Я также хочу убедиться, что для данного типа услуги (# 0091) для компании (101) уже существует в текущем году, тогда я не должен вставлять новые строки в таблицу базы данных.

Большое спасибо за вашу помощь, что нашли время и поняли мой вопрос, чтобы получить соответствующий результат.

1 Ответ

3 голосов
/ 25 мая 2011

Вы можете попробовать что-то вроде этого, чтобы сгенерировать строки для вставки:

DECLARE @CurrentYear INT = YEAR(GETDATE())

;WITH DatesToInsert AS
(
    SELECT 
        101 AS 'CompanyID',
        GETDATE() AS 'TodayDate', 
        '0091' AS 'ServiceType'

    UNION ALL

    SELECT 
        101 AS 'CompanyID',
        DATEADD(WEEK, 4, dti.TodayDate) AS 'TodayDate', 
        '0091' AS 'ServiceType'
    FROM      
        DatesToInsert dti
    WHERE
        YEAR(DATEADD(WEEK, 4, dti.TodayDate)) = @CurrentYear
)
SELECT * FROM DatesToInsert

Из этого CTE (Common Table Expression) вы можете вставить значения в таблицу и проверить все остальные ваши требования. И, конечно, вы можете сделать номер 4 в вызове DATEADD настраиваемым, например, в качестве параметра хранимого процесса, который содержит этот CTE для обработки вставок.

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