È ñíîâà, çäðàâñòâóéòå.
Ïðè ïåðåâîäå ñèñòåìû ñ mdb+mdb íà mdb+SQL âîçíèêëà
î÷åðåäíàÿ ïðîáëåìà, âûçâàííàÿ ðàçëè÷íûì ïîâåäåíèåì Access è SQL server. Çàêëþ÷àåòñÿ îíà â ñëåäóþùåì: ïðè îáíîâëåíèè ïîëÿ òàáëèöû äàííûìè èç ïðèñîåäèí¸ííîé òàáëèöû, â ñëó÷àå, êîãäà íà êàæäóþ ñòðîêó èñõîäíîé òàáëèöû ïðèõîäèòñÿ íåñêîëüêî ñòðîê ïðèñîåäèí¸ííîé, ðåçóëüòàò äëÿ Access ïîëó÷àåòñÿ êàê ñóììàðíîå/ïîñëåäîâàòåëüíîå îáíîâëåíèå êàæäîé èç ñîîòíåññ¸íûõ ñòðîê. À ðåçóëüòàò SQL Server (êàê è íàïèñàíî â åãî äîêóìåíòàöèè) íåäåòåðìèíèðîâàííîå îáíîâëåíèå êàêîé íèáóäü èç ñîîòíåñ¸ííûõ ñòðîê.
 Access:
CurrentDb.Execute "CREATE TABLE A (id int, valA real);"
CurrentDb.Execute "CREATE TABLE B (id int, valB real);"
CurrentDb.Execute "insert into A(id, valA) VALUES (1, 1);"
CurrentDb.Execute "insert into A(id, valA) VALUES (1, 2);"
CurrentDb.Execute "insert into A(id, valA) VALUES (1, 3);"
CurrentDb.Execute "insert into A(id, valA) VALUES (2, 1);"
CurrentDb.Execute "insert into A(id, valA) VALUES (2, 2);"
CurrentDb.Execute "insert into A(id, valA) VALUES (3, 0);"
CurrentDb.Execute "insert into B(id, valB) VALUES (1, 0);"
CurrentDb.Execute "insert into B(id, valB) VALUES (2, 0);"
CurrentDb.Execute "insert into B(id, valB) VALUES (3, 0);"
CurrentDb.Execute "UPDATE A INNER JOIN B ON A.id = B.id SET B.valB = B.valB + A.valA;"
docmd.OpenTable "B"
Ïîëó÷àåòñÿ:
Íà SQL server:
CREATE TABLE A (id int, valA real);
insert into A(id, valA) VALUES (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (3, 0);
CREATE TABLE B (id int, valB real);
insert into B(id, valB) VALUES (1, 0), (2, 0), (3, 0);
UPDATE B SET B.valB = B.valB + A.valA FROM A INNER JOIN B ON A.id = B.id ;
SELECT * FROM B;
Ïîëó÷àåòñÿ:
Èñïðàâèòü ïðîáëåìó äëÿ îäíîãî ïðîñòîãî çàïðîñà ìîæíî ãðóïïèðîâêîé:
UPDATE B SET B.valB = B.valB + AA.valA FROM (SELECT SUM(valA) as valA, id FROM A GROUP BY id) AS AA INNER JOIN B ON AA.id = B.id ;
Íî, òàêèõ çàïðîñîâ ìíîãî è îíè, â îñíîâíîì, íå ïðîñòûå. Ïèñàòü ïðîãðàììó ïî èñïðàâëåíèþ òåêñòà çàïðîñîâ íå ïðîñòî.
Íî åñòü ëè äðóãèå âàðèàíòû?
http://www.sql.ru/forum/1304747/privesti-povedenie-update-na-sql-server-k-povedeniu-kak-u-access