У меня есть две таблицы: table1 и table2 (таблицы почти идентичны, table2 имеет дополнительное поле. 30 столбцов в table1 и 31 столбец в table2. Дополнительный столбец является ключевым).
У меня также есть процедура, которая сначала получает номер. Если число больше 10, я хочу пометить строку во всех 30 столбцах от table1 до table2. В противном случае я хочу вставить столбцы с 1 по 20 (из таблицы 1) и вставить столбцы с 20-30, умноженные на 30. Я создал два разных «ВСТАВИТЬ В ТАБЛИЦУ» для каждой ситуации (выше / ниже 10), но я верю, что есть более эффективный способ, так как первые 20 строк должны быть одинаковыми во всех случаях. Я подумал вставить сначала первые 20 строк, а после ввода оператора «IF» и затем «вставить» в соответствии с заданным параметром оставшиеся столбцы. Но у меня, конечно, получается две строки вместо одной.
какое решение, так что я вставлю все данные в одну строку?
Вот пример с 10 столбцами (вместо 30). В этом примере, если параметр больше 10, мы вставим строку как есть в table2 . в противном случае мы вставим col1-col7 и умножим col8-col10.
параметр = 15
table1
Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 |Col10 |
======+======+======+======+======+======+======+======+======+======+
1 | 1 | 1 | 2 | 2 | 2 | 2 | 5 | 5 | 5 |
table2 (Идентично таблице 1, потому что параметр> 10)
Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 |Col10 |
======+======+======+======+======+======+======+======+======+======+
1 | 1 | 1 | 2 | 2 | 2 | 2 | 5 | 5 | 5 |
Если параметр был параметр = 3 , тогда таблица 2 будет:
table2 (столбцы 8-10 умножены)
Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8 | Col9 |Col10 |
======+======+======+======+======+======+======+======+======+======+
1 | 1 | 1 | 2 | 2 | 2 | 2 | 150 | 150 | 150 |
A template to my code:
if @Parameter >10
begin
INSERT INTO Table1
(Col1
,Col2
,Col3
...
,Col29
,Col30)
SELECT
Col1
,Col2
,Col3
...
,Col29
,Col30
FROM ...
wHERE ...
end
else
begin
INSERT INTO Table1
(Col1
,Col2
,Col3
...
,Col29
,Col30)
SELECT
Col1
,Col2
,Col3
...
,Col29
,Col30
FROM ...
wHERE ...
end
Сейчас у меня больше 120 строк, когда 2/3 из них дублируются.
Как сделать это эффективнее?