2011-01-02 2 views
0

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

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

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

ответ

1

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

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

Code ChangeTo 
8410 18 
8321 18 
7865  1 

Ваш запрос будет тогда быть что-то вроде:

UPDATE MyTable 
INNER JOIN NewTable 
ON MyTable.Code = NewTable.Code 
SET MyTableCode = NewTable.ChangeTo 
+0

проблема в том, что я пытаюсь обновить 9000 значений в 19 новых значений. Поэтому я не думаю, что могу использовать предложенный вами подход? – ozlem

+0

Почему бы и нет? Я не думаю, что у вас есть 9000 различных значений для обновления, не так ли? В новой таблице требуется либо одна запись для каждого существующего кода, либо iIff один-к-одному - проблема, диапазон, упомянутый в предыдущем сообщении. – Fionnuala

+0

Извините, я новичок в доступе, поэтому, возможно, я ошибаюсь. В таблице у меня есть 219338 строк, и у меня 9000 значений, поэтому значения повторяются несколько раз. Могу ли я использовать этот метод временной таблицы? – ozlem

0

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

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

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 
+0

Если я напишу обновленные значения вручную, то я не могу понять, как организовать временную таблицу. Я сделал бы это непосредственно на таблице, которую я обновляю. Я ошибаюсь? Кстати, у меня есть 9000 значений, которые нужно обновить! – ozlem

+0

Единственная причина для новой таблицы, если у вас есть поле, связанное с другим полем в условии iif. –

+0

@ Waleed A.K. Я не уверен, понимаю ли я ваш подход, но если я это сделаю, я не думаю, что это очень хорошая идея, потому что это не поможет с проблемой операторов if. – Fionnuala

1

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

+0

большое спасибо за вашу помощь. – ozlem

Смежные вопросы