Year()
- это функция, которая возвращает целое число подтипов варианта, которое соответствует календарному году значения даты, которое вы даете функции.
В вашем случае, похоже, у вас есть поле с именем Year
. Поэтому, возможно, «отсутствующий параметр» является аргументом ожидаемой даты для функции Year()
.
Вы можете избежать путаницы двигателя db, заключая в квадратные скобки 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, которые вы будете страдать. :-)
Для получения дополнительной информации о «вызовах именования» см. Problem names and reserved words in Access.
Извините, я не заметил, что запрос может работать, несмотря на эту проблему WHERE.
Я ничего не вижу о оставшейся части вашего SQL, которая должна вызвать жалобу от движка db. Я предполагаю, что вы проверили это утверждение непосредственно в Access и не получили никаких ошибок.
Если есть что-то своеобразное для взаимодействия между SAS и Access, которое вызывает это, возможно, вы могли бы использовать сохраненный запрос Access как обход. Возьмите этот SQL и сохраните его как именованный запрос, qrySasTest
, в вашем db доступа. Затем попробуйте выполнить команду qrySasTest
со стороны SAS.
Да. Если предложение set прочитало 'set a.var1 = b.var1', инструкция обновления будет работать. –
Вы упоминаете SAS, но SAS не допускает пробелов в именах переменных (по крайней мере, не без специального кодирования). Может ли это быть проблема? Выполняете ли вы вышеуказанное в программе SAS, и если да, то именно что вы пытаетесь? – BellevueBob
@BobDuell, вы правы, SAS не допускает пробелов в именах переменных. Однако таблицы хранятся в MS Access, что позволяет использовать пробелы.Вышеприведенный пример кода будет содержаться в сквозном: 'proc sql; подключиться к доступу (путь = "C: /database.mdb"); выполнить ( обновление [Оригинал] Таблица как внутреннее соединение Updates, как б на a.ID = b.ID набор а. [Variable 1] = б. [Переменная 1] где год = "2000" ) по доступ; отключить доступ; quit; ' –