W tym artykule pokażę, co następuje:
- Jak wstawić dane wyjściowe funkcji z wartościami przechowywanymi w tabeli do tabeli SQL.
- Jak wstawić dane wyjściowe funkcji z wartościami przechowywanymi w tabeli, która jest tworzona na zdalnym serwerze bazy danych.
Co to jest instrukcja „Wstaw do”
W RDBMS „Wstaw do” jest jedną z podstawowych instrukcji SQL. Służy do wstawiania nowych rekordów w tabeli SQL. Za pomocą oświadczenia możemy wykonać następujące zadania:
- Wstaw nowe rekordy do tabeli (wstawianie podstawowe).
- Wstaw wartości określonej kolumny w tabeli.
- Wstaw wynik wygenerowany przez procedurę składowaną do tabeli SQL.
Aby zademonstrować powyższe, utwórzmy tabelę o nazwie „Uczniowie ” na DemoDatabase. Wykonaj następujący kod, aby utworzyć tabelę:
UTWÓRZ TABELĘ STUDENTS ( ID INT IDENTITY (1, 1) PRIMARY KEY, FIRSTNAME VARCHAR (250), LASTNAME VARCHAR (250), WEJŚCIE DATA, GODZINA, ZNAK OCENY(1) )
Wykonaj podstawowe wstawianie
Aby wykonać podstawowe wstawianie, musimy podać nazwę tabeli docelowej i wartości tabeli. Poniżej znajduje się podstawowa składnia podstawowej instrukcji wstawiania:
WSTAW WARTOŚCI W( , ..)
Na przykład chcemy wstawić imię, nazwisko i klasę trzech uczniów w tabeli „Uczniowie”. Aby to zrobić, wykonaj następujący kod:
WSTAWIĆ WARTOŚCI UCZNIÓW („NISARG”, „UPADHYAY”, „11.09.2018”, „A”), („RAGHAV”, „DATTA”, „01.10.2017”, „A”) , („KIRAN”, „AMIN”, „31.01.2016”, „A”)
Wykonaj zapytanie „Wybierz” względem „Studenta”, aby przejrzeć wyniki.
WYBIERZ IMIĘ, NAZWISKO, DATĘ WSTĘPU, OCENĘ UCZNIÓW
Wynik jest następujący:
Wstaw wartości z określonej kolumny w tabeli
Aby wstawić wartości w określonych kolumnach tabeli, musisz podać nazwę tabeli docelowej oraz nazwy kolumn, w których chcesz wstawić dane. Poniżej znajduje się składnia.
WSTAW DO( KOLUMNY 1 , KOLUMNY 2 ) WARTOŚCI ( , .. )
Na przykład chcemy wstawić imię i nazwisko dwóch uczniów w polu „Uczniowie " stół. Aby to zrobić, wykonaj następujący kod:
WSTAW WARTOŚCI UCZNIÓW (IMIĘ, NAZWISKO) ('NIMESH', 'UPADHYAY'), ('RUPESH', 'DATTA')
Wykonaj zapytanie „Wybierz” dla „Uczniów ” tabela.
WYBIERZ IMIĘ, NAZWISKO, DATĘ WSTĘPU, OCENĘ UCZNIÓW
Wynik wygląda następująco:
Wstaw wynik, wygeneruj za pomocą procedury składowanej
Aby wstawić dane wyjściowe procedury składowanej do tabeli, musimy określić nazwę tabeli docelowej i źródłową procedurę składowaną. Aby wygenerować dane wyjściowe procedury składowanej, musimy użyć słowa kluczowego „exec” lub „EXECUTE”. Dlatego musimy podać nazwę tabeli lub nazwy kolumn, po których następuje słowo kluczowe „exec”. Oto składnia:
INSERT INTO( KOLUMNA 1 , KOLUMNA 2 ) EXEC
Na przykład chcemy wstawić wynik procedury, który wypełnia nazwiska studentów, których data przyjęcia nie jest pusta. W tym celu utworzymy procedurę składowaną o nazwie „spGet_Student_AdmissionDate ”. Aby utworzyć procedurę składowaną, wykonaj następujący kod:
UŻYJ DEMODATABASE GO UTWÓRZ PROCEDURĘ SPGET_STUDENT_ADMISSIONDATE JAK POCZĄTEK SELECT ISNULL(IMIĘ, '') + ' ' + ISNULL(NAZWISKO, '') JAK NAZWISKO, DATA WEJŚCIA, OCENA UCZNIÓW GDZIE DATA PRZYJĘCIA NIE JEST NULL END>Po utworzeniu procedury uruchom ją, wykonując następujący kod:
WYKONAJ spGet_Student_AdmissiondateWynik wygląda następująco:
Jak wspomniałem powyżej, chcemy wstawić dane wyjściowe procedury składowanej o nazwie „spGet_Student_Admissiondate ” w tabeli tymczasowej. Najpierw wykonaj następujący kod, aby utworzyć tabelę:
( ID INT IDENTITY (1, 1), NAZWA UCZNIA VARCHAR(250), DATA PRZYJĘCIA DATA GODZINA, ZNAK OCENY(1) )Po utworzeniu tabeli wykonaj następujący kod, aby wstawić dane wyjściowe „spGet_Student_Admissiondate ” do „#TempStudents ”.
WSTAW W #TEMPSTUDENTS WYKONAJ SPGET_STUDENT_ADMISSIONDATE Dane wyjściowe:(3 wiersze dotknięte)Sprawdźmy teraz wynik „#TEMPSTUDENTS ”. Aby to zrobić, wykonaj następujący kod:
Teraz, jak wspomniałem powyżej, zademonstruję, w jaki sposób możemy wstawić dane wyjściowe wygenerowane przez funkcję zwracającą tabelę do tabeli SQL. Po pierwsze, zrozummy, czym jest funkcja z wartościami w tabeli.
Co to jest funkcja wartościująca tabelę
Funkcja zwracająca tabelę to specjalny kod T-SQL, który akceptuje parametry/parametry i na podstawie warunków zdefiniowanych w zmiennej zwraca zestaw wyników w zmiennej tabeli. Oto zalety korzystania z funkcji z wartościami tabelarycznymi:
- Można to wykonać w zapytaniu Select.
- Może być używany w wielu częściach zapytania, np. w instrukcji Case, gdzie/zawiera klauzule.
- Wynikiem funkcji z wartościami tabelarycznymi jest zestaw rekordów, dlatego możesz połączyć funkcję z tabelami.
Wstaw dane wyjściowe wbudowanej funkcji z wartościami z tabeli w tabeli SQL
W tej sekcji wyjaśnię, jak wstawić dane wyjściowe funkcji z wartościami przechowywanymi w tabeli do tabeli SQL za pomocą T-SQL.
Do demonstracji używam bazy danych AdventureWorks2014. Utworzyłem wbudowaną wielowartościową funkcję tabelową o nazwie „GetEmployeesbyHireDate ”. Ta funkcja wypełnia informacje o pracownikach zatrudnionych w określonym dniu i czasie. Funkcja wykorzystuje @FormDate i @Toda parametry do filtrowania danych. Dane wyjściowe funkcji zostaną zapisane w tabeli SQL.
Poniższy kod tworzy funkcję:
CREATE FUNCTION GETEMPLOYEESBYHIREDATE (@FROMDATE AS DATETIME, @TODATE AS DATETIME) TABELA @EMPLOYEES (NAZWA PRACOWNIKA VARCHAR (MAX), DATA URODZIN DATETIME, JOBTITLE VARCHAR(150), EMAILID VARCHARIRE(100), NUMER TELEFONU VARCHAR(20), NUMER TELEFONU VARCHAR DATETIME ) JAK POCZĄTEK WSTAWIĆ W @EMPLOYEES SELECT ( ISNULL( B. FIRSTNAME, '') + ' ' + ISNULL( B.MIDDLENAME, '') + ' ' + ISNULL( B.LASTNAME, '') )AS PRACOWNIK, A .DATA URODZIN, B.STANOWISKO, B.ADRES E-MAILOWY, B.NUMER TELEFONU, A.DATA ZATRUDNIENIA Z [ZASOBY LUDZKIE].[PRACOWNIK] A WEWNĘTRZNE DOŁĄCZENIE [ZASOBY LUDZKIE].[PRACOWNIK] B NA A.IDENTYFIKACJI BIZNESOWEJ =B.IDENTYFIKACJI BIZNESOWEJ GDZIE A.ZATRUDNIENIE BET @FROMDATE I @TODATE ZWROT KONIECUżywając zapytania Select, możemy uzyskać dane wyjściowe funkcji SQL. Na przykład chcesz wypełnić listę pracowników zatrudnionych w roku 2009. Wykonaj następujące zapytanie, aby uzyskać listę:
DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' WYBIERZ * Z GETMPLOYEESBYHIREDATE(@FROMDT, @TODT)Wynik powyższego zapytania wygląda następująco:
Teraz utwórz tabelę o nazwie „tblEmploye e”, aby przechowywać dane wyjściowe funkcji „GetEmployeesbyHiredate funkcja. Poniższy kod tworzy tabelę o nazwie „tblEmployee ”.
UTWÓRZ TABELĘ TBLEMPLOYEES ( NAZWA PRACOWNIKA VARCHAR (MAX), DATA URODZENIA DATETIME, STAN STANOWISKA VARCHAR (150), EMAILID VARCHAR (100), NUMER TELEFONU VARCHAR (20), ZATRUDNIJ DATETIME )Jak wspomniałem wcześniej, chcemy uzupełnić informacje o pracownikach, którzy zostali zatrudnieni w 2009 roku. Aby to zrobić, wstaw dane wyjściowe GetEmployeesbyHireDate funkcja w tblEmployees stół. Aby to zrobić, wykonaj następujący kod:
DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' WSTAW W TLE PRACOWNICY WYBIERZ NAZWISKO PRACOWNIKA, DATA URODZIN, STANOWISKO, IDENTYFIKATOR E-MAIL, NUMER TELEFONU, DATA ZATRUDNIENIA Z GEESBYTEMPLO (@FROMDT, @TODT)Sprawdźmy, czy dane zostały wstawione do tabeli. Aby to zrobić, wykonaj następujący kod:
WYBIERZ * OD PRACOWNIKÓWWynik wygląda następująco:
Wstaw dane do tabel ze zdalnych baz danych
Czasami możesz chcieć wyodrębnić dane z serwerów przechowywanych w innym centrum danych. Można to zrobić za pomocą serwera SQL Linked.
W tej sekcji wyjaśnię, jak wstawić wyjście funkcji o wartościach tabelarycznych, utworzonej na zdalnym serwerze. Teraz, aby zademonstrować scenariusz, poniżej przedstawiono konfigurację.
[identyfikator tabeli=57 /]
W demo wykonamy następujące zadania:
- Na serwerze źródłowym (SQL_VM_1 ), utwórz funkcję o wartości tabeli o nazwie „getCustomerByCountry ” na „AdventureWorks2014 ” do wypełnienia danych.
- Na serwerze docelowym utwórz połączony serwer o nazwie „Remote_Server ”, aby wykonać funkcję (getCustomerByCountry ).
- Na serwerze docelowym utwórz tabelę o nazwie „Klient ” do przechowywania danych pobranych przez funkcję zdalną (getCustomerByCountry ).
Poniższy obraz ilustruje konfigurację.
Zadanie do wykonania na serwerze źródłowym:
Na serwerze źródłowym (SQL_VM_1 ), utwórz funkcję o nazwie „getCustomerByCountry ”. Wypełnia dane klienta znajdującego się w określonym kraju lub regionie. Funkcja wykorzystuje @CountryName parametr do filtrowania danych. Wykonaj następujący kod, aby utworzyć funkcję.
Zmień FUNKCJA Getcustomerbycountry(@CountryName VARCHAR) zwraca @Customers TABLE ( nazwa_klienta VARCHAR(500), numer telefonu VARCHAR(50), adres e-mail VARCHAR(100), adres VARCHAR(maks.), miasto VARCHAR(150), kraj VARCHAR(250) ), kod pocztowy VARCHAR(50))AS BEGIN WSTAWIĆ W @Customers SELECT nazwa_klienta, numer telefonu, adres e-mail, adres, miasto, kraj, kod pocztowy FROM klienci GDZIE kraj przykł[email protected] RETURN ENDZadania do wykonania na serwerze docelowym:
Aby wypełnić dane z serwera źródłowego (SQL_VM_1 ), najpierw utwórz połączony serwer między źródłem (SQL_VM_1 ) i miejsce docelowe (SQL_VM_ 2). Wykonaj następujący kod na serwerze docelowym (SQL_VM_2 ), aby utworzyć połączony serwer.
USE [MASTER]GOEXEC MASTER.DBO.SP_ADDLINKEDSERVER @SERVER =N'SQL_VM_1', @SRVPRODUCT=N'SQL SERVER'GOEXEC MASTER.DBO.SP_ADDLINKEDSRVLOGIN @RMTSRVNAME=N' Remote_Server',@USESELF=N'FALSE' ,@LOCALLOGIN=NULL,@RMTUSER=N'SA',@RMTPASSWORD='########'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'KOMPATYBILNE ZBIÓRKI', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=B'DOSTĘP DO DANYCH', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server' , @OPTNAME=N'DIST', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'PUB', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO. SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC OUT', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'SUB', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTN AME=N'CONNECT TIMEOUT', @OPTVALUE=N'0'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'NAZWA UKŁADANIA', @OPTVALUE=NULLGOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'LAZY SCHEMAT VALIDATION', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'LIMIT CZASU ZAPYTANIA', @OPTVALUE=N' 0'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'UŻYJ ZDALNEGO UKŁADANIA', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'ZDALNA PROMOCJA TRANSAKCJI PROC', @OPTVALUE=N'FALSE'GOPo utworzeniu połączonego serwera utwórz tabelę SQL do przechowywania informacji o klientach i wypełnij ją, wykonując funkcję SQL utworzoną na serwerze źródłowym (SQL_VM_1 ).
Wykonaj następujący kod, aby utworzyć tabelę.
UŻYJ DEMODATABASEGOUTWÓRZ TABELĘ KLIENCI ( ID INT IDENTITY (1, 1), NAZWA KLIENTA VARCHAR (500), NUMER TELEFONU VARCHAR (50), ADRES E-MAILOWY VARCHAR (100), ADRES VARCHAR (MAX), CITY VARCHAR (150), VARCHAR KRAJU ( 250), KOD POCZTOWY VARCHAR(50) )Korzystając z serwera połączonego, możemy wykonać funkcję zwracającą tabelę utworzoną na zdalnym serwerze bazy danych. Podczas próby wykonania funkcji przy użyciu serwera połączonego pojawia się następujący błąd:
Wiadomość 4122, poziom 16, stan 1, wiersz 28.Zdalne wywołania funkcji zwracających tabelę nie są dozwolone.Dlatego aby wykonać dowolną funkcję na zdalnym serwerze, musimy użyć słowa kluczowego OPENQUERY. Służy do inicjowania kwerendy rozproszonej ad hoc przy użyciu serwera połączonego. Zapoznaj się z tym artykułem, aby zrozumieć koncepcję OPENQUERY.
Aby użyć OPENQUERY, musimy włączyć zaawansowany parametr konfiguracji o nazwie „Rozproszone zapytania ad hoc ” na serwerze źródłowym i docelowym. Wykonaj następujący kod, aby go włączyć.
UŻYJ MASTERGOEXEC SP_CONFIGURE 'POKAŻ OPCJE ZAAWANSOWANE', 1REKONFIGURUJ Z OVERRIDEEXEC SP_CONFIGURE 'DYSTRYBUOWANE ZAPYTANIA AD HOC', 1REKONFIGURUJ Z ZASTĄPIENIEMTeraz chcę wypełnić listę klientów z Wielkiej Brytanii i wstawić ich w „Klienci " stół. Jak wspomniałem, funkcja akceptuje nazwę kraju do filtrowania rekordów. Teraz musimy wykonać następujący skrypt na serwerze docelowym (SQL_VM_2 ), aby wypełnić listę klientów znajdujących się w „Wielka Brytania”.
WYBIERZ NAZWĘ KLIENTA, NUMER TELEFON, ADRES E-MAIL, ADRES, MIASTO, KRAJ, KOD POCZTOWY Z OPENQUERY([TTI609-VM2], 'DECLARE @COUNTRY VARCHAR(150)SET @COUNTRY=''WIELKA BRYTANIA'' SELECT * Z [ADVENTUREWORKS2014] .DBO.GETCUSTOMERBYKRAJ(''''+ @KRAJ +'''')' )Wynik wygląda następująco:
Teraz, aby wstawić dane wypełnione przez w tabeli „Klienci”, wykonaj następujący skrypt na serwerze docelowym (SQL_VM_2 ).
WSTAW KLIENTÓW (NAZWA KLIENTA, NUMER TELEFONU, ADRES E-MAIL, ADRES, MIASTO, KRAJ, KOD POCZTOWY) WYBIERZ NAZWA KLIENTA, NUMER TELEFON, ADRES E-MAIL, ADRES, MIASTO, KRAJ, KOD POCZTOWY Z OPENQUERY([TTI609-VM2], 'DEARCLARE @COUNT 150)SET @COUNTRY=''WIELKA BRYTANIA'' SELECT * FROM [ADVENTUREWORKS2014].DBO.GETCUSTOMERBYCOUNTRY(''''+ @COUNTRY +'''')' )/*Wyjście*/(1913 wierszy dotyczy)Sprawdźmy teraz, czy dane zostały wstawione poprawnie. Aby to sprawdzić, wykonaj następujące zapytanie na serwerze docelowym (SQL_VM_2).
UŻYJ DEMODATABASEGOSELECT 20 NAZWY KLIENTA, NUMER TELEFONU, ADRES E-MAIL, ADRES, MIASTO, KRAJ, KOD POCZTOWY OD KLIENTÓWWynik wygląda następująco:
Podsumowanie
W tym artykule omówiłem:
- Oświadczenie „Wstaw do” i jego użycie.
- Jak zapisać dane wyjściowe funkcji z wartościami przechowywanymi w tabeli w tabeli SQL.
- Jak zapisać dane wyjściowe funkcji z wartościami przechowywanymi w tabeli do tabeli SQL znajdującej się na zdalnym serwerze przy użyciu połączonego serwera.