Выполните ВСТАВЛЯЮТ с ВЫБОРОМ для вставки нескольких записей

Это мое решение:

import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;

public class GenericClass<T extends String> {

  public static void main(String[] args) {
     for (TypeVariable typeParam : GenericClass.class.getTypeParameters()) {
      System.out.println(typeParam.getName());
      for (Type bound : typeParam.getBounds()) {
         System.out.println(bound);
      }
    }
  }
}
18
задан Pure.Krome 7 May 2009 в 05:41
поделиться

6 ответов

INSERT 
  MainTable_Option 
  (
  MainTableID, 
  OptionID
  )
SELECT
  d.ID, 
  o.OptionId
FROM
  DodgyOldTable d
  INNER JOIN Option o ON
    (d.OptionVal1 = 'Y' AND o.OptionDesc = 'OptionVal1') OR
    (d.OptionVal2 = 'Y' AND o.OptionDesc = 'OptionVal2') OR
    (d.OptionVal3 = 'Y' AND o.OptionDesc = 'OptionVal3')
35
ответ дан 30 November 2019 в 07:18
поделиться

Что относительно решения для ПЕРЕКРЕСТНОГО ОБЪЕДИНЕНИЯ?

DECLARE @DodgyOldTable TABLE (ID INT, OptionVal1 CHAR, OptionVal2 CHAR, 
  OptionVal3 CHAR)
INSERT INTO @DodgyOldTable
SELECT 1, 'y', 'n', 'y' UNION
SELECT 2, 'y', 'n', 'n' UNION
SELECT 3, 'n', 'n', 'y' UNION
SELECT 4, 'y', 'y', 'y' UNION
SELECT 5, 'n', 'n', 'n'

DECLARE @Option TABLE (OptionID INT, OptionDesc VARCHAR(100))
INSERT INTO @Option
SELECT 1, 'OptionVal1' UNION
SELECT 2, 'OptionVal2' UNION
SELECT 3, 'OptionVal3'

SELECT ID, OptionID FROM
(
    SELECT 
        ID, 
        CASE    
          WHEN (OptionVal1 = 'y' AND OptionDesc = 'OptionVal1') 
            OR (OptionVal2 = 'y' AND OptionDesc = 'OptionVal2') 
            OR (OptionVal3 = 'y' AND OptionDesc = 'OptionVal3')
          THEN OptionID 
          ELSE NULL 
        END AS OptionID 
    FROM @DodgyOldTable DOT CROSS JOIN @Option O 
)CRS
WHERE OptionID IS NOT NULL
1
ответ дан 30 November 2019 в 07:18
поделиться

возможно, не наиболее эффективное решение, но при помощи объединения, это должно работать.

INSERT MainTable_Option ([MainTableID],[OptionID])
SELECT ID, (SELECT OptionID FROM Option WHERE OptionDesc = 'OptionVal1')
FROM DodgyOldTable dot
WHERE OptionVal1 = 'y'
UNION SELECT ID, (SELECT OptionID FROM Option WHERE OptionDesc = 'OptionVal2')
FROM DodgyOldTable dot
WHERE OptionVal2 = 'y'
UNION SELECT ID, (SELECT OptionID FROM Option WHERE OptionDesc = 'OptionVal3')
FROM DodgyOldTable dot
WHERE OptionVal3 = 'y'
1
ответ дан 30 November 2019 в 07:18
поделиться

Мой опыт - это, часто более легко и более читаем для деления его на меньшие биты. Не пытайтесь сделать все в одном едином запросе. Особенно то, когда Вы делаете миграцию, пишет сценарий, это не должно быть проблемой.

Записывают шаги, возможно, представляют временную таблицу, пишут сценарии для миграции данных, и Вы хороши для движения!

1
ответ дан 30 November 2019 в 07:18
поделиться

Я сказал бы, что ручной сценарий миграции будет легче использовать тогда попытку сделать это в единственном запросе SQL, если это будет опцией.

0
ответ дан 30 November 2019 в 07:18
поделиться

Вы могли ОБЪЕДИНЕНИЕ все выборы вместе для предоставления одного набора результатов, но это зависит от причин того, что не желались несколько выборов - если будут слишком многие, или количество выборов может часто изменяться, то это все еще будет боль для исправления запроса с дополнительными выборами. Unfortunatly я думаю, что необходимо будет поместить логику где-нибудь, которая определяет, какой бит (биты) DodgyOldTable отображается на новую структуру и или пишет сценарий миграции (или пакет SSIS) для увеличения объема, мигрируют (если это - то от задания), или ОБЪЕДИНЕНИЕ результаты вместе...

INSERT MainTable_Option ([MainTableID],[OptionID])
SELECT ID, (CASE WHEN OptionVal1 = 'y' THEN (SELECT OptionID FROM Option WHERE OptionDesc = 'OptionVal1') END
FROM DodgyOldTable
WHERE OptionVal1 = 'y
UNION
SELECT ID, (CASE WHEN OptionVal2 = 'y' THEN (SELECT OptionID FROM Option WHERE OptionDesc = 'OptionVal2') END
FROM DodgyOldTable
WHERE OptionVal2 = 'y
...
0
ответ дан 30 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

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