Динамично Изменяясь, что таблицу выбрать из с Оператором выбора SQL

Ваше сообщение об ошибке гласит следующее:

Нет доступного квалифицирующего компонента типа de.zipcode.view.mapper.ZipCodeMapper: ожидается как минимум 1 компонент, который считается кандидатом на автопровод. ]

Таким образом, проблема здесь:

@Autowired
@Qualifier("delegate")
public void setDelegate(PersonMapper delegate) {
    this.delegate = delegate;
}

Вы пытаетесь выполнить автоматическое подключение в PersonMapper, но не указали bean-компонент, который соответствует требованиям. Вам необходимо настроить @Bean для PersonMapper, чтобы Spring мог внедрить его или аннотировать ваш PersonMapper (или класс, который его расширяет) с помощью @Component (или любого расширяющего стереотипа)

.
8
задан Cade Roux 29 January 2009 в 17:53
поделиться

5 ответов

Вы не можете оператор варианта использования в ИЗ пункта, но можно использовать следующее вместо этого:

SELECT itemnumber, itemtype, description
  FROM tablea
 WHERE itemnumber = @itemnumber AND itemtype = 'A'
UNION ALL
SELECT itemnumber, itemtype, description
  FROM tableb
 WHERE partnumber = @itemnumber AND itemtype <> 'A'
5
ответ дан 5 December 2019 в 12:13
поделиться

Вы могли попытаться создать динамический SQL-оператор как строку и затем назвать sp_executesql хранимую процедуру для выполнения строки.

Посмотрите здесь для получения дополнительной информации и примеры.

4
ответ дан 5 December 2019 в 12:13
поделиться

Я не уверен, почему Вы хотите сделать вещи в одном SQL-операторе.. Я не человек SQL Server, но в хранимой процедуре Oracle Вы могли записать что-то вроде этого

If itemtype = 'A' 
Then 
 <statement for table A>
Else
 <statement for Table B>
End if

Что-то вроде этого должно работать в SQL Server, также.. возможно, кто-то мог подробно остановиться на этом?

4
ответ дан 5 December 2019 в 12:13
поделиться

Вы действительно не объясняете где ItemType прибывает из. Как предложено UNION могло бы быть применимым, если Вы просто комбинируете две таблицы.

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

SELECT ItemNumber,
       ItemType, 
       COALESCE(TableA.Description, TableB.Description) AS Description
FROM Items
LEFT JOIN TableA
    ON Items.ItemType = 'A'
    AND TableA.ItemNumber = Items.ItemNumber
LEFT JOIN TableB
    ON Items.ItemType <> 'A'
    AND TableB.ItemNumber = Items.ItemNumber
1
ответ дан 5 December 2019 в 12:13
поделиться

Вы лучше из использования Запроса на объединение, чтобы присоединиться к таблицам сначала и затем ВЫБРАТЬ.

Кроме того, можно рассмотреть создание представления для одной из таблиц, таким образом, это вытягивает только столбцы, Вы нуждаетесь при переименовании их, затем ОБЪЕДИНЕНИЕ, и затем выбираете из ОБЪЕДИНЕНИЯ.

Или используйте временную таблицу для хранения результата каждого запроса. Поместите создание временной таблицы в СЛУЧАЕ (псевдокод, не протестированный):

CASE @itemType
   WHEN 'A'
      SELECT ACol1 AS Col1, ACol2 AS Col2
      FROM TABLE_A
      INTO #tempTable
      WHERE ItemNumber = @itemNumber
   ELSE
      SELECT BCol1 AS Col1, BCol2 AS Col2
      FROM TABLE_B
      INTO #tempTable
      WHERE PartNumber = @itemNumber
END

SELECT * FROM #tempTable
0
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: