SSMS jak zapisać wynik zapytania jako nowa tabela

0

Cześć, Nie mogę sobie poradzić z zapisaniem zapytania jako tabela , zapytanie w management studio baza odpytywana oracle przez linked server. Nie wiem czy muszę pierwszej kolejności stworzyć tabelę ze wszystkimi właściwościami później ją uzupełnić, czy można ściągnąć dane kopiując pola automatycznie z odpytywanej tabeli.

SELECT * 
FROM OPENQUERY(REPLIKA_EU, 'SELECT 
TABELA1.A_CLIE, 
TABELA1.A_INDEX, 
TABELA1.A_NAZWA, 
TABELA1.A_BRAND, 
TABELA1.A_STATUT, 
TABELA2_INDEX.EI_C_EAN, 
TABELA3_DEST.CC_C_OPIEK, 
TABELA1.A_C_DEST, 
TABELA1.A_DATE_SUP, 
TABELA1.A_ABC_MIN_DVL AS PRZYJ, 
TABELA1.A_ABC_BEZPIECZ AS SKLEP,
TABELA1.A_ABC_MIN_DVL-TABELA1.A_ABC_BEZPIECZ*1 AS BAZY,
TABELA1.A_CDT_XYZ_A AS PAKOWANIE,
TABELA1.A_CDT_XYZ_B AS WARSTWA,
TABELA1.A_CDT_XYZ_C AS ILE_WARSTW,
TABELA1.A_CDT_XYZ_B*TABELA1.A_CDT_XYZ_C*1 AS PALETA,
TABELA2_INDEX.EI_ORDRE

FROM TABELA2_INDEX INNER JOIN (TABELA3_DEST INNER JOIN TABELA1 ON (TABELA3_DEST.CC_C_DEST = TABELA1.A_C_DEST) AND (TABELA3_DEST.CC_CLIE = TABELA1.A_CLIE)) ON TABELA2_INDEX.EI_INDEX = TABELA1.A_INDEX')

WHERE A_DATE_SUP > '2017-01-01 00:00:00.0000000' AND EI_ORDRE = 1

dziękuję za pomoc

4

SELECT INTO najprościej składnia jak:

    SELECT column-names
      INTO new-table-name
      FROM table-name
     WHERE condition 

https://www.dofactory.com/sql/select-into

0

BlackBad dzięki działa, mam jeszcze dodatkowe pytanie, jak zawrzeć warunek jeżeli tabela istnieje to wyczyść dane i uaktualnij. Oraz jak filtrować bez pobierania kolumny, w tej chwili w selekcie pobieram kolumny, miedzy innymi TABELA2_INDEX.EI_ORDRE, żeby później po wartości w niej zawartej filtrować,

SELECT * 
TABELA2_INDEX.EI_ORDRE

WHERE EI_ORDRE = 1

w accesie nie musiałem jej pobierać, żeby ją filtrować, jak w ssms filtrować bez pobierania.

1

Z SELECt * INTO tworzysz tabelę. Zatem możesz sprawdzić czy ona istnieje i jeśli tak to ja usunąć w ten sposób:

-- zakładamże tablea nazywa się TABELA2_INDEX w schemacie dbo
IF OBJECT_ID('dbo.TABELA2_INDEX', 'U') IS NOT NULL 
  DROP TABLE dbo.TABELA2_INDEX; 

Po powyższym tabela zostanie usunięta jeśli istnieje bądź nic się nie stanie jeśli nie istnieje. Teraz możesz użyć poprzedniego kodu SELECT INTO.

co do 2 pytania to w żadnym znanym mi silniku bazo-danowym nie potrzeba "wybrać" tabeli w SELECT żeby później móc ją wykorzystać w klauzuli WHERE. Także śmiało usuń ja z select po prostu :) Tak jak w accessie.

0

BlackBad głowę bym dał, że z filtrowaniem próbowałem i nie działało, ale oczywiście wszystko działa, z tym, że mamy dwa SELECT`y ten od nowej lokalnej tabeli (w tym miejscu nie może być tej kolumny) i ten za OPENQUERY, który odpowiada za odpytanie tabel znajdujących się w * linked servers *gdzie już muszę podać nazwę kolumny, na której filtruję. Z pewnością dla kogoś, kto z "palca" pisze zapytania jest to oczywiste, ja jednak musiałem kombinować, ale się udało. Całość wygląda jak poniżej

IF OBJECT_ID('[dbo].[indeksy_20]') IS NOT NULL
 
DROP TABLE indeksy_20

SELECT 
A_CLIE,
A_INDEX,
A_NAZWA,
A_BRAND,
A_STATUT,
INDEX.EI_C_EAN,
DEST.CC_C_OPIEK,
A_C_DEST,
A_DATE_SUP,
A_ABC_MIN_DVL AS PRZYJ,
A_ABC_BEZPIECZ AS SKLEP,
BAZY,
PAKOWANIE,
WARSTWA,
ILE_WARSTW,
PALETA

INTO indeksy_20

FROM OPENQUERY(REPLIKA_EU, 'SELECT 
TABELA1.A_CLIE, 
TABELA1.A_INDEX, 
TABELA1.A_NAZWA, 
TABELA1.A_BRAND, 
TABELA1.A_STATUT, 
TABELA2.INDEX.EI_C_EAN, 
TABELA3.DEST.CC_C_OPIEK, 
TABELA1.A_C_DEST, 
TABELA1.A_DATE_SUP, 
TABELA1.A_ABC_MIN_DVL AS PRZYJ, 
TABELA1.A_ABC_BEZPIECZ AS SKLEP,
TABELA1.A_ABC_MIN_DVL-TABELA1.A_ABC_BEZPIECZ*1 AS BAZY,
TABELA1.A_CDT_XYZ_A AS PAKOWANIE,
TABELA1.A_CDT_XYZ_B AS WARSTWA,
TABELA1.A_CDT_XYZ_C AS ILE_WARSTW,
TABELA1.A_CDT_XYZ_B*TABELA1.A_CDT_XYZ_C*1 AS PALETA,
TABELA2.INDEX.EI_ORDRE

FROM TABELA2_INDEX INNER JOIN (TABELA3.DEST INNER JOIN TABELA1 ON (TABELA3.DEST.CC_C_DEST = TABELA1.A_C_DEST) AND (TABELA3.DEST.CC_CLIE = TABELA1.A_CLIE)) ON TABELA2.INDEX.EI_INDEX = TABELA1.A_INDEX')

WHERE A_DATE_SUP > '2017-01-01 00:00:00.0000000' AND EI_ORDRE = 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1