Introducerea mai multor instrucțiuni selectate într-un tabel ca valori

Este posibil să faceți așa ceva în SQL Server:

INSERT INTO MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7) VALUES

SELECT Col1 FROM Func1(),

SELECT Col2 FROM Func2(),

SELECT Col3,Col4,Col5 FROM Func3(),

SELECT Col6 FROM Func4(),

SELECT Col7 FROM Func5()

Am un număr mare de funcții care returnează rezultate cu o valoare și o funcție care returnează 3 coloane. Aș dori să introduc toate aceste date într-un rând dintr-un tabel?

Pot vedea funcția de returnare a coloanelor muliple ca fiind o posibilă problemă?

4
@Nikola, dacă vrei să spui că conține "întoarce tabelul ca" și întoarce un rând, da.
adăugat autor mezamorphic, sursa
Englezul tău a fost bine - astfel aș fi descris-o
adăugat autor mezamorphic, sursa
Este funcția Func3() o funcție de valoare în tabel care întoarce un rând?
adăugat autor Nikola Markovinović, sursa
Da, exact asta am vrut să spun. Îmi învinovățesc abilitățile de vorbire în limba engleză. Deci, sunt toate celelalte funcții la fel, cu excepția faptului că returnează doar o singură coloană?
adăugat autor Nikola Markovinović, sursa

3 răspunsuri

Dacă toate funcțiile returnează doar un rând ...

INSERT INTO
  MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7)
SELECT
  f1.col1, f2.col2, f3.col3, f3.col4, f3.col5, f4.col6, f5.col7
FROM
  (SELECT Col1 FROM Func1())           AS f1
CROSS JOIN
  (SELECT Col2 FROM Func2())           AS f2
CROSS JOIN
  (SELECT Col3,Col4,Col5 FROM Func3()) AS f3
CROSS JOIN
  (SELECT Col6 FROM Func4())           AS f4
CROSS JOIN
  (SELECT Col7 FROM Func5())           AS f5

Dacă funcțiile returnează mai mult de un rând, trebuie să le înscrieți în mod normal; cu predicate care determină ce rând de stânga se îmbină la rândul din dreapta.

10
adăugat
Singura modalitate de a asocia două seturi de date pe orizontală este cu un JOIN. Deoarece aceste seturi sunt rânduri unice și nu au predicat să se alăture, acestea oferă un CROSS JOIN.
adăugat autor MatBailie, sursa
@ Er.ShaileshS.Bankar Atunci seturile dvs. de date nu sunt rânduri unice, caz în care aveți nevoie de un INNER JOIN sau LEFT JOIN pe care puteți specifica predicat să se alăture. În acest caz, deschideți o nouă întrebare cu exemple de date, exemplu de interogare, rezultate așteptate etc.
adăugat autor MatBailie, sursa
Bună ziua @MatBailie, nu putem face asta fără să ne alăturăm?
adăugat autor ShaileshDev, sursa
da, dar da rezultate necorespunzătoare. Date redundante.
adăugat autor ShaileshDev, sursa
 INSERT INTO MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7) VALUES

 SELECT Col1 FROM Func1(),

 SELECT Col2 FROM Func2(),

 SELECT Col3 FROM (SELECT Col3,Col4,Col5 FROM Func3()),

 SELECT Col4 FROM (SELECT Col3,Col4,Col5 FROM Func3()),

 SELECT Col5 FROM (SELECT Col3,Col4,Col5 FROM Func3())

 SELECT Col6 FROM Func4(),

 SELECT Col7 FROM Func5()
0
adăugat
Trebuie să introduceți () în jurul tuturor sub-interogărilor și () în jurul setului complet. VALUES ((SELECT x FROM y), (SELECT a FROM b), etc)
adăugat autor MatBailie, sursa

Trebuie să eliminați Values ​​and all "," și paranteze în jurul fiecărei instrucțiuni selectate.

0
adăugat