Как многие предлагали в комментариях, вы должны полностью прочитать о том, как UPDATE
работает на SQL Сервере, так как это будет делать все, что вам нужно.
В любом случае, вот пример, чтобы помочь объяснить это для вас. Во-первых, давайте создадим таблицу Employees
и заполните ее несколькими записями:
create table Employees
(
id int,
first_name varchar(50),
last_name varchar(50),
starting_date date,
last_checked date
)
insert into Employees values
(1, 'John', 'Smith', '2016-05-16', null),
(2, 'Sandra', 'Evans', '2013-02-02', null),
(3, 'Phil', 'Jones', '2019-10-25', null),
(4, 'Jenny', 'Lewis', '2018-07-11', null),
(5, 'Steve', 'Daniels', '2018-02-28', null)
Теперь мы можем выбрать все строки из этой таблицы и посмотреть данные:
select * from Employees
RESULTS:
/------------------------------------------------------------\
| id | first_name | last_name | starting_date | last_checked |
|----|------------|-----------|---------------|--------------|
| 1 | John | Smith | 2016-05-16 | NULL |
| 2 | Sandra | Evans | 2013-02-02 | NULL |
| 3 | Phil | Jones | 2019-10-25 | NULL |
| 4 | Jenny | Lewis | 2018-07-11 | NULL |
| 5 | Steve | Daniels | 2018-02-28 | NULL |
\------------------------------------------------------------/
Теперь, если мы хотим обновить каждую строку в таблице, например, чтобы установить значение в столбце last_checked
, это можно сделать с помощью простого оператора UPDATE
:
update Employees set last_checked = getdate()
Это обновляет каждую запись в таблице:
select * from Employees
RESULTS:
/------------------------------------------------------------\
| id | first_name | last_name | starting_date | last_checked |
|----|------------|-----------|---------------|--------------|
| 1 | John | Smith | 2016-05-16 | 2020-01-21 |
| 2 | Sandra | Evans | 2013-02-02 | 2020-01-21 |
| 3 | Phil | Jones | 2019-10-25 | 2020-01-21 |
| 4 | Jenny | Lewis | 2018-07-11 | 2020-01-21 |
| 5 | Steve | Daniels | 2018-02-28 | 2020-01-21 |
\------------------------------------------------------------/
При желании вы можете в равной степени использовать выражение WHERE
, чтобы определить , какие записи должны быть обновлены:
update Employees set last_checked = '2019-01-01' where starting_date <= '2019-01-01'
select * from Employees
RESULTS:
/------------------------------------------------------------\
| id | first_name | last_name | starting_date | last_checked |
|----|------------|-----------|---------------|--------------|
| 1 | John | Smith | 2016-05-16 | 2019-01-01 |
| 2 | Sandra | Evans | 2013-02-02 | 2019-01-01 |
| 3 | Phil | Jones | 2019-10-25 | 2020-01-21 |
| 4 | Jenny | Lewis | 2018-07-11 | 2019-01-01 |
| 5 | Steve | Daniels | 2018-02-28 | 2019-01-01 |
\------------------------------------------------------------/
Обратите внимание, как обновлялась каждая last_checked
дата, кроме даты для Фила Джонса, из-за предложения where starting_date <= 2019-01-01
в операторе update
.
Надеемся, что это демонстрирует основы оператора update
, которая, конечно, может быть заключена в хранимую процедуру, если вам нужно:
create procedure [dbo].[updateEmployeeLastChecked]
@newDate date = null
as
if @newDate is null set @newDate = getdate()
update Employees set last_checked = @newDate where starting_date <= @newDate
Так что в этом случае хранимая процедура принимает необязательный параметр (по умолчанию текущая дата, если не указана), указывающая дату для использоваться при обновлении записей я в таблице Employees
при условии, что указанная дата после starting_date
для каждого сотрудника. Не очень полезная или реалистичная c процедура, но, надеюсь, она демонстрирует этот принцип.