Обновить столбец в таблице на основе другого поля таблицы

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица рецептов, которую я хочу установить неактивной на основе условия в таблице пациентов. Сработает ли это?

  update Prescription
set active = 0
from prescription left join patients on patients.id = prescription.patientid
where patients.[site] = @site
  

Я пока не хочу рисковать, поскольку у меня активная производственная база данных.

Комментарии:

1. Почему бы вам не использовать вспомогательный запрос?

2. @SandipPatel — например?

3. Вы могли бы включить это в транзакцию, проверить свои измененные наборы данных с помощью select и выполнить откат в конце до proof. Синтаксис транзакции зависит от SQL-реализации.

4. Почему левое соединение вместо внутреннего соединения?

5. Ознакомьтесь с транзакциями в SQL Server. Если у вас нет тестового сервера / базы данных, это следующий лучший подход. Базовый формат — BEGIN TRANSACTION UPDATE...; SELECT...; ROLLBACK TRANSACTION . Не забывайте регулярно создавать резервные копии своей базы данных, так как рано или поздно вы забудете выполнить откат.

Ответ №1:

Используйте простой подзапрос:

 UPDATE Prescription
SET active = 0 
WHERE patientid IN(SELECT id FROM patients WHERE [site] = @site)
  

или

 UPDATE Prescription
SET active = 0 
WHERE EXISTS (SELECT id FROM patients p WHERE p.id=Prescription.patientid AND p.[site] = @site)
  

Комментарии:

1. СУЩЕСТВУЮТ часто лучше, чем В