#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. СУЩЕСТВУЮТ часто лучше, чем В