S .l Server har interessante funktion fremfoere sit linkede servere. Det handler om at forbinde andre databaser til s .l Server og bruge deres data som om de er lokale. Der er mange kraftfulde open source-Systemer skrevet på PHP, og de bruger for det meste Mys .l som database. Dette blogindlæg viser, hvordan man linker Mys .l-database til s .l Server, og hvordan man bruger linket server i s .l-forespørgsler.
Hvad er linket server?,
linket server i MSS .l er en anden databaseserver forbundet til en given, hvilket gør det muligt at forespørge og manipulere data i andre databaser. Som eksempel kan vi linke nogle Mys .l-database til MSS .l og bruge den næsten som enhver anden database på MSS .l.
Billedet er taget fra MSSQL 2019 dokumentation side
Linkede Servere (Database Engine)
Selv om kommunikation med linkede servere går gennem OLE DB-providere, der er også OLE DB provider for ODBC, og vi kan bruge det, hvis vores eksterne database ikke har OLE DB-provider.
NB!, Linked server er tilgængelig for hele s .l Server instans. Det betyder, at alle s .l Server-databaser kan bruge linket server til at hente data.
Sammenkædning MySQL SQL Server
Tilføjelse er knyttet server og konfiguration af forbindelse indstilling er ikke altid let, og ligetil.
til At få MySQL knyttet til SQL-Server jeg havde brug for at oprette ODBC DSN for MySQL (jeg kaldte det som MySQLCrm). Før du går til næste trin, skal du sørge for, at ODBC-datakilden fungerer.,
Følg disse trin for at link MySQL SQL-Server:
- Kør SQL Server Management Studio (SSMS)
- oprette Forbindelse til din server
- Udvid Server-node Objekter fra træet til venstre
- Højre-klik på Linket Servere
- Vælg Ny Forbundet Serveren…
Du bør se følgende dialogboks (eller en smule anderledes, men den idé er stadig den samme).
NB! Vær ekstra opmærksom på, hvad du indsætter i denne dialog. Med dette sæt data lavede jeg linkarbejde. Jeg prøvede forskellige værdier, og hvis noget er en millimeter forkert, fejler forbindelsen., Det er en følsom dialog.
forbindelsesstreng til Mys .l – database skal være som vist her:
vær også opmærksom på OPTION=3-uden dette fik jeg kun fejl tilbage ved tilslutning til linket server.
prøv at gemme ved at klikke på OK og se om du kan gennemse til linket server. Hvis du får fejl, skal du højreklikke på serveren og vælge Egenskaber. Hold dialogen åben, gå til serverindstillinger side. Indstil RPC og RPC ud indstillinger til True.,
Jeg er stadig ikke særlig sikker på, hvad disse muligheder gør, men nogle af dem, der havde problemer med link til Mys .l, fik det til at fungere efter at have sat RPC-S til true.
for at få forespørgsler til at fungere, har vi brug for endnu en lille ændring, der påvirker hele OLE DB-udbyderen og derfor alle forbindelser, der bruger den. Åbn udbydere node under linkede servere, Højreklik på msdas .l (dette er OLE DB provider for ODBC datakilder) og vælg Egenskaber.marker afkrydsningsfeltet før kun niveau nul, og klik på OK for at gemme ændringer.,
forespørge data fra sammenkædet server
forespørge sammenkædede databaser er faktisk nemt. Her er kundetabellen fra crmlinked database i Mys .l. Denne database er knyttet til min s .l Server.syntaks til forespørgsel af linked server er lidt anderledes end hvad vi normalt skriver på s .l Server. Vi skal bruge firedelede navne: server.database.skema.tabel. Da der ikke er nogen skemaer på Mys .l og connection string angiver databasenavn, så kan vi lade disse ud som vist her.
select * from MYSQLCRM...customers
kørsel af denne forespørgsel fra SSMS giver følgende output., Det er de samme data, der er i Mys .l kunder tabel.
selvfølgelig kan vi også skrive mere komplekse forespørgsler. Alt, hvad ODBC kan håndtere, er okay.
blanding af data fra lokal og linket server
tabeller fra linket server er ikke helt isoleret fra lokale databasetabeller og visninger. Vi kan også blande data fra lokale og sammenkædede server.
for at demonstrere blandet forespørgsel over lokale og linkede tabeller lad os skrive enkel forespørgsel for at få alle kunder fra lokal tabel og deres kreditvurderinger fra linket tabel.kørsel af denne forespørgsel giver os følgende output.,
da Mark ikke er til stede i Mys .l-databasen (Antag, at han er ny kunde i e-shop, og salgsafdelingen ikke har ham Endnu i deres CRM-system), har han ikke kreditværdighed tilgængelig. Kreditvurderinger for John og Mary kommer fra Mys .l i den aktuelle sag.
brug open .uery() til at udføre forespørgsel i linked server
eksemplerne ovenfor gør al databehandling på s .l Server. Det kan være meget unoptimal, hvis der er en masse data i linked server tabeller. Vi ønsker måske – eller normalt ønsker-at behandle nogle data i linked server, før s .l Server starter lokal behandling., Til dette har vi Open .uery().
Her er eksemplet på at bruge Open .uery () – funktionen i blandet forespørgsel. Vi skal angive linket servernavn og S .l-forespørgsel for at køre i linked server, når du ringer open .uery(). Forespørgslen i rødt udføres i Mys .l server, og resultaterne læses til s .l Server til videre behandling.
SELECT
c.FirstName,
c.LastName,
crm_c.credit_rating as CreditRating
FROM
Customers c
LEFT JOIN OPENQUERY(MYSQLCRM, '
SELECT
c.credit_rating
FROM
customers p
left join loyalty_points lp on
c.customer_id = lp.customer_id
WHERE
lp.points > 1000
') crm_c ON
c.ssn = crm_c.ssn
ORDER BY
crm_c.credit_rating,
c.LastName,
c.FirstName
open .uery() er en fantastisk måde at optimere og fremskynde blandede forespørgsler ved at køre mere komplekse forespørgsler over linkede serverdata i linket server.,
indpakning af
linkede servere er kraftfuld funktion af s .l Server, hvilket gør det nemt for os at bruge data fra eksterne servere. Der er to måder at skrive forespørgsler ved hjælp af data fra linkede servere – direkte forespørgsler, der gør alle behandling på SQL Server og OPENQUERY (), der giver os mulighed for at gøre nogle forarbejdning i remote server. Linked server er integration og derfor bruger det brug for ekstra pleje. Planlægning og performance måling er must-være aktiviteter, når du planlægger at bruge linket server.
- tweet
- del
- del
- del
- del
- del
- del
- del
Skriv et svar