оставляя ценности такими, какие они есть - PullRequest
0 голосов
/ 02 января 2011

У меня короткий вопрос: мне нужна команда, чтобы некоторые значения остались прежними в запросе на обновление с оператором iff.Немного предыстории моей проблемы: у меня есть запрос на обновление, который довольно длинный с 19 iff утверждениями.Если утверждения выглядят так:

UPDATE  1963
SET ProductCode = IIF(
        (ProductCode >=  8410 and ProductCode <= 8421),
        18,   and so on...

Так что в основном я обновляю поле в соответствии со значениями в том же поле.Когда я запускаю код, Access 2003 выдает ошибку «выражение слишком сложное».Поскольку я не могу запустить весь код сразу, я подумал, что могу разделить код на две части и запускать отдельно.Но как только я запускаю первую часть, так как это оператор iff, значения, которые не указаны в первой части кода, становятся нулевыми.Поэтому я не могу запустить вторую часть кода, поскольку не могу указать диапазон кода продукта для второй части (все они становятся нулевыми). Поэтому мне нужен способ сделать так, чтобы неуказанные значения остались такими же, как и в первой частитак что я могу запустить вторую часть, чтобы завершить код.То есть мне нужно что-то сказать, если (ProductCode> = 8410 и ProductCode <= 8421) установить код продукта = 18, в противном случае не меняйте значение.Заранее спасибо. </p>

Ответы [ 3 ]

1 голос
/ 02 января 2011

Я бы переместил условия IIF в предложение where и сделал бы ProductCode высокими и низкими ограничениями и новыми значениями в параметрах. Затем выполните запрос 19 раз в коде с различными параметрами. Если бы у вас была серверная часть SQL Server, был бы более элегантный способ сделать это, но для чистого решения Access вам повезет, если бы логика запросов была простой и компенсировала разницу с некоторым кодом VBA.

1 голос
/ 02 января 2011

Если у вас есть несколько утверждений If, пришло время взглянуть на подход, который вы используете.В этом случае я предлагаю вам использовать таблицу, которая включает текущее значение и значение, которое вы хотите изменить, как было предложено в предыдущем посте.Вам не нужен диапазон, если он не подходит, простое соответствие один к одному не сложно.

Новая таблица:

Code  ChangeTo
8410    18
8321    18
7865     1

Ваш запрос будет выглядеть примерно так:

UPDATE MyTable 
INNER JOIN NewTable 
ON MyTable.Code = NewTable.Code
SET MyTableCode = NewTable.ChangeTo
0 голосов
/ 02 января 2011

Попробуйте создать временную таблицу для установки новых значений, затем выполните обновление для временной таблицы.

Создать новую таблицу [NewTable] на основе той же структуры, что и старая. [Без первичного ключа]

Insert into NewTable (ID,field1,field2…..)
Select  ID,  iif(fiedl1condition,    trueValue,falseValue),………
From OldTable 

UPDATE OldTable 
INNER JOIN NewTable 
ON OldTable .ID= NewTable.ID
SET Field1 = NewTable.Field1
Field2 = NewTable.Field2
Field3 = NewTable.Field3

Drop TABLE NewTable
...