Year()
— это функция, которая возвращает целое число вариантного подтипа, соответствующее календарному году значения даты, которое вы даете функции.
В вашем случае кажется, что у вас есть поле с именем Year
. Так что, возможно, «отсутствующий параметр» — это ожидаемый аргумент даты для Year()
функции.
Вы можете избежать путаницы с механизмом БД, заключив Year
в квадратные скобки. Скобки сигнализируют движку, что Year
— это имя объекта (поля), а не функции.
update [Original Table] as a inner join Updates as b on a.ID = b.ID
set a.[Variable 1] = b.[Variable 1]
where [Year] = "2000";
По возможности лучше использовать имена, не конфликтующие с зарезервированными словами. Это может оказаться непрактичным в вашей ситуации... но если вы можете сделать это, вы уменьшите количество проблем, связанных с разработкой Access. :-)
Дополнительную информацию о «проблемах именования» см. в разделе имена задач и зарезервированные слова в Access.
Извините, я упустил из виду тот факт, что запрос может работать, несмотря на проблему с предложением WHERE.
Я ничего не вижу об остатке вашего SQL, который должен вызвать жалобу от механизма БД. Я предполагаю, что вы проверили это утверждение непосредственно в Access и не получили никаких ошибок.
Если есть что-то особенное во взаимодействии между SAS и Access, которое вызывает это, возможно, вы могли бы использовать сохраненный запрос Access в качестве обходного пути. Возьмите этот SQL и сохраните его как именованный запрос qrySasTest
в базе данных Access. Затем попробуйте выполнить qrySasTest
со стороны SAS.
person
HansUp
schedule
24.09.2012
set a.var1 = b.var1
, оператор update работал бы. - person attitude_stool   schedule 24.09.2012proc sql; connect to access (path="C:/database.mdb"); execute ( update [Original Table] as a inner join Updates as b on a.ID = b.ID set a.[Variable 1] = b.[Variable 1] where Year = "2000" ) by access; disconnect from access; quit;
- person attitude_stool   schedule 25.09.2012