J'ai une question concernant la syntaxe suivante. Existe-t-il un moyen plus propre de regrouper cela en une seule déclaration plutôt qu'en deux? J'ai essayé plusieurs itérations mais cela semble être la seule façon de réussir à exécuter ces deux instructions.
UPDATE employee
SET hire_date = '1979-03-15'
WHERE emp_id = 'PMA42628M'
UPDATE employee
SET hire_date = '1988-12-22'
where emp_id = 'PSA89086M';
J'ai également essayé cela et j'ai également essayé d'utiliser une instruction AND. Aucun n'a fonctionné. Fondamentalement, je recherche un moyen moins novice que la méthode ci-dessus, si elle existe. J'ai passé beaucoup de temps à chercher et je n'en ai pas trouvé.
UPDATE employee
SET hire_date = ('1979-03-15', '1988-12-22')
WHERE emp_id = ('PMA42628M', 'PSA89086M');
Appriciez n'importe quel conseil sur celui-ci, et en passant, j'utilise le serveur sql. Merci
Essayez celui-ci, cela combinera plusieurs sélections et les renvoie comme si elles provenaient de la base de données:
UPDATE e
SET hire_date = t.hire_date
FROM dbo.employee e
JOIN (
SELECT emp_id = 'PMA42628M', hire_date = '1979-03-15'
UNION ALL
SELECT emp_id = 'PSA89086M', hire_date = '1988-12-22'
) t ON t.emp_id = e.emp_id
Si vous utilisez SQL Server 2008 ou une version ultérieure, vous pouvez également utiliser une syntaxe différente pour la table dérivée:
UPDATE e
SET hire_date = t.hire_date
FROM dbo.employee e
JOIN (
VALUES
('PMA42628M', '1979-03-15'),
('PSA89086M', '1988-12-22')
) t (emp_id, hire_date) ON t.emp_id = e.emp_id
Je cherche un moyen moins novice
Faire deux déclarations de mise à jour distinctes est (selon moi) "la façon la moins novice" de compliquer les choses et de faire quelque chose comme ça.
update employee
set hire_date = case emp_id
when 'PMA42628M' then '1979-03-15'
when 'PSA89086M' then '1988-12-22'
end
where emp_id in ('PMA42628M', 'PSA89086M')
mais qu'est-ce que cela vous apporterait? La mise à jour entière s'exécuterait dans une transaction implicite, donc si vous voulez que vos deux mises à jour soient dans une transaction, vous utilisez simplement begin transaction .... commit
.
Vous pouvez créer une table temporaire ou une variable de table contenant les mises à jour que vous souhaitez effectuer, puis exécuter l'instruction UPDATE
liant la table à la table que vous souhaitez mettre à jour.
Notez que pour deux mises à jour, vous obtenez deux instructions: INSERT
dans la table de mise à jour et l'instruction UPDATE
elle-même. Le nombre de déclarations reste cependant deux pour autant de mises à jour que vous devez faire.
CREATE TABLE #employee (emp_id VARCHAR(9) NOT NULL PRIMARY KEY,hire_date DATE NOT NULL);
INSERT INTO #employee (emp_id,hire_date)
VALUES ('PMA42628M','2013-06-05'),('PSA89086M','2013-06-05');
CREATE TABLE #target_updates(emp_id VARCHAR(9) NOT NULL,hire_date DATE NOT NULL);
INSERT INTO #target_updates (emp_id,hire_date)
VALUES ('PMA42628M','1979-03-15'),('PSA89086M','1988-12-22');
UPDATE
#employee
SET
hire_date=tu.hire_date
FROM
#employee AS e
INNER JOIN #target_updates AS tu ON
tu.emp_id=e.emp_id;
SELECT
*
FROM
#employee
ORDER BY
emp_id;
DROP TABLE #target_updates;
DROP TABLE #employee;