powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как обойти ошибку при update?
13 сообщений из 13, страница 1 из 1
Как обойти ошибку при update?
    #39735539
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Есть определенная форма в которую пользователь загружает эксель, в результате создается временная таблица Temp_table (PriceID, Qty, Price) и нажимает обновить прайс.

Запрос на SQL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Price') 
update p set price = t.price  from price p
join Temp_table t on p.PriceID = t.PriceID

if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Qty') 
update p set Qty= t.Qty  from price p
join Temp_table t on p.PriceID = t.PriceID



Тут все пройдет нормально, но если пользователь создаст временную таблицу Temp_table (PriceID,Price) или Temp_table (PriceID,Qty) то это приводит к ошибке:
Недопустимое имя столбца "Price".
или
Недопустимое имя столбца "Qty".
Сам запрос SQL не выполняет, все зарубает на стадии проверки.

Можно обойти добавив перед запросом:
Код: sql
1.
2.
3.
4.
5.
if not exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Price')  
begin 
  ALTER TABLE Temp_table  
  ADD Price money 
end 



Но это усложняет код. Усложнять работу пользователю чтобы он пользовался строго определенной формой тоже не вариант.
Есть способ правильно обойти проверку?
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735541
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitox,

правильно - не обновлять все подряд объекты "универсальными скриптами"

ваш случай завернуть в динамику update
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735543
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,
Как динамике увидеть временную таблицу созданную не в динамике?
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735575
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitox,

перезагружайте неполные промежуточные данные в таблицу с полной структурой, например. Затем апдейт с полноценной таблицей.
Немного усложнится загрузчик по количеству вариантов.
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735577
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxTaPaK,
Как динамике увидеть временную таблицу созданную не в динамике?
Temp_table это "временная таблица"?

ну и очевидно - создавать в той же динамике
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735578
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, наверное, будет та же проблема... Динамическим запросом, согласен.
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735582
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и да все почитатели универсально плохих скриптов, должны универсально страдать
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735613
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не всегда есть возможность редактировать на всех этапах... В моем случае приходят данные из приложения во временной таблице созданной не в динамике, и я могу только с ней работать. Без страданий никак))
Думал может ключ какой есть, для игнорирования ошибок...
Пока добавлять заранее отсутствующий столбец перед выполнением - лучшее решение. Без дополнительных таблиц и переливания туда сюда данных.
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735723
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxНе всегда есть возможность редактировать на всех этапах... В моем случае приходят данные из приложения во временной таблице созданной не в динамике, и я могу только с ней работать. Без страданий никак))
Думал может ключ какой есть, для игнорирования ошибок...
Пока добавлять заранее отсутствующий столбец перед выполнением - лучшее решение. Без дополнительных таблиц и переливания туда сюда данных.Temp_table - это ПОСТОЯННАЯ таблица, а не временная.

P.S. Для определения существования объекта достаточно написать OBJECT_ID(N'ИмяОбъекта') IS NOT NULL
А для колонки я обычно пишу COL_LENGTH(N'ИмяТаблицы',N'ИмяКолонки') IS NOT NULL
Намного короче, чем у вас.
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735738
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxВсем привет! Есть определенная форма в которую пользователь загружает эксель, в результате создается временная таблица Temp_table (PriceID, Qty, Price) и нажимает обновить прайс.

Запрос на SQL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Price') 
update p set price = t.price  from price p
join Temp_table t on p.PriceID = t.PriceID

if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Qty') 
update p set Qty= t.Qty  from price p
join Temp_table t on p.PriceID = t.PriceID




Тут все пройдет нормально, но если пользователь создаст временную таблицу Temp_table (PriceID,Price) или Temp_table (PriceID,Qty) то это приводит к ошибке:
Недопустимое имя столбца "Price".
или
Недопустимое имя столбца "Qty".
Сам запрос SQL не выполняет, все зарубает на стадии проверки.

Можно обойти добавив перед запросом:
Код: sql
1.
2.
3.
4.
5.
if not exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Price')  
begin 
  ALTER TABLE Temp_table  
  ADD Price money 
end 




Но это усложняет код. Усложнять работу пользователю чтобы он пользовался строго определенной формой тоже не вариант.
Есть способ правильно обойти проверку?То есть, вы не понимаете, почему сервер не желает апдейтить Price из таблицы Temp_table, в которой поля Price попросту нет?
А добавить туда поле Price - означает "усложнить код"?
Однако!
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735787
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Price') 
exec ('update p set price = t.price  from price p
join Temp_table t on p.PriceID = t.PriceID')

if exists (select 1 from sys.all_columns where object_id = OBJECT_ID('Temp_table') and  name = 'Qty') 
exec ('update p set Qty= t.Qty  from price p
join Temp_table t on p.PriceID = t.PriceID')

fumitox,
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735791
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAnt,

Чукча не читатель?
...
Рейтинг: 0 / 0
Как обойти ошибку при update?
    #39735834
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxсоздается временная таблица Temp_table (PriceID, Qty, Price)

но если пользователь создаст временную таблицу Temp_table (PriceID,Price) или Temp_table (PriceID,Qty) то это приводит к ошибке

Есть способ правильно обойти проверку?

Не понял. Это нормально, что подразумевается, что должно обновиться два столбца, а пользователь отправляет только один?
Если нормально, то поставьте пользователю в "форму" галку, и пусть он выбирает, что он конкретно отправляет.

Но по сути вы пишете: Есть способ правильно обойти ошибку запроса? И ответ тут очевиден. Ошибки не "обходятся", а исправляются.
А вообще надо как минимум проверять данные приходящие от пользователя. А если у вас там в Price или Qty строка записана?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как обойти ошибку при update?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]