Spørring MySQL fra SQL Server ved hjelp av koblede server

posted in: Articles | 0

SQL Server har en interessant funksjon calles Knyttet Servere. Det handler om å knytte andre databaser til SQL Server og bruke deres data som om det er lokale. Det er mange kraftige open-source systemer som er skrevet i PHP, og de er for det meste bruker MySQL som database. Denne bloggen viser hvordan koblingen MySQL database til SQL Server, og hvordan du bruker koblet server i SQL-spørringer.

Hva er koblet server?,

Koblet server i MSSQL er noen andre database-serveren som er koblet til en gitt ett, noe som gjør det mulig å spørring og manipulere data i andre databaser. Ved eksempel, kan vi knytte noen MySQL database til MSSQL og bruker det nesten som en hvilken som helst annen database på MSSQL.

Bildet er tatt fra MSSQL 2019 dokumentasjon side
Knyttet Servere (Database Engine)

Selv om kommunikasjon med knyttet servere går via OLE DB-leverandører, er det også OLE DB provider for ODBC og vi kan bruke det hvis våre eksterne databasen ikke har OLE DB-leverandøren.

NB!, Koblet server er tilgjengelig for hele SQL Server-forekomsten. Det betyr at alle SQL Server databaser kan bruke knyttet server for å hente data.

Skuffer MySQL til SQL Server

ved å Legge knyttet server og konfigurere tilkoblingen innstillingen er ikke alltid enkel og grei.

for Å få MySQL knyttet til SQL Server-jeg trengte for å lage ODBC DSN for MySQL (heter jeg det som MySQLCrm). Før du går til neste trinn, må du kontrollere at ODBC-datakilde fungerer.,

Følg disse trinnene for å koble MySQL til SQL Server:

  1. Kjør SQL Server Management Studio (SSMS)
  2. Koble til server
  3. Utvid Server Objekter node fra treet til venstre
  4. Høyre-klikk på Tilkoblede Servere
  5. Velg Ny Knyttet Server…

Du bør se den følgende dialogen (eller litt annerledes, men ideen er den samme).

NB! Betaler ekstra oppmerksomhet til hva du vil sette inn denne dialogboksen. Med dette settet av data jeg laget link arbeid. Jeg prøvde forskjellige verdier og hvis det er noe som er en millimeter feil så tilkoblingen mislykkes., Det er jævla sensitive dialog.

Tilkobling string til MySQL database skal være som vist her:

Også betale oppmerksomhet til OPTION=3, uten at dette fikk jeg bare feil tilbake når du kobler til en koblet server.

Prøv å spare ved å klikke på OK, og se om du kan bla til en koblet server. Hvis du får feil høyreklikk deretter på server, og velg egenskaper. Å holde dialogboksen åpne, flytte til Server Alternativer-siden. Angi RPC-og RPC-Ut-innstillingene til True.,

jeg er fortsatt ikke helt sikker på hva er disse valgene gjør, men noen av de som hadde problemer med kobling til MySQL gjorde det fungere etter innstilling RPC-s true.

for Å lage spørring faktisk fungerer, vi trenger en liten endring som påvirker hele OLE DB-leverandøren, og derfor er alle tilkoblinger som bruker det. Åpne Leverandører node under Koblede Servere, høyre-klikk på MSDASQL (dette er OLE DB provider for ODBC data kilder) og velg egenskaper.

merk av i boksen før Nivå Null, og klikk OK for å lagre endringene.,

Spørring data fra en koblet server

Spørring knyttet databaser er faktisk lett. Her er kunder-tabellen fra crmlinked database i MySQL. Denne databasen er knyttet til min SQL Server.

Syntaks for spørring knyttet server er litt forskjellig fra hva vi vanligvis skriver på SQL Server. Vi trenger å bruke fire-navn: server.database.skjema.Tabell. Så det er ingen skjemaer på MySQL og tilkobling string angir database navn, så vi kan la disse ut som vist her.

select * from MYSQLCRM...customers

Kjører denne spørringen fra SSMS gir følgende resultat., Det er de samme dataene som er i MySQL kunder-tabellen.

selvfølgelig, vi kan også skrive mer komplekse spørringer. Alt som ODBC kan håndtere er greit.

Blande data fra lokale og knyttet server

koblede Tabeller fra serveren ikke er helt isolert fra lokal database tabeller og visninger. Vi kan også blande data fra lokale og knyttet server.

for Å vise blandet spørring over lokale og koblede tabeller la oss skrive en enkel spørring for å få alle kunder fra lokale bordet og deres kredittvurdering fra koblede tabellen.

å Kjøre dette søket gir oss følgende resultat.,

Som Mark er ikke til stede i MySQL-database (antar at han er ny kunde i e-shop og salg avdelingen ikke har ham ennå i sitt CRM-system) så han ikke ha credit rating er tilgjengelig. Kredittratinger for John og Mary kommer fra MySQL i gjeldende sak.

ved Hjelp av OPENQUERY() for å kjøre spørringen i koblet server

eksemplene ovenfor gjør alle data prosessering på SQL Server. Det kan være veldig unoptimal hvis det er mye data i en koblet server bordene. Vi vil kanskje – eller vanligvis ønsker å behandle noen data knyttet server før SQL Server starter lokal foredling., For dette har vi OPENQUERY().

Her er eksempel på bruk av OPENQUERY () – funksjonen i blandet søk. Vi har å angi knyttet server navn og SQL-spørring for å kjøre i en koblet server når du ringer OPENQUERY(). Spørringen i rødt er utført i MySQL server og resultatene er lese for SQL Server for 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

OPENQUERY() er en flott måte å optimalisere og øke hastigheten blandet søk ved å kjøre mer komplekse spørringer over koblet server data i en koblet server.,

Innpakning opp

Knyttet servere er kraftig funksjon av SQL Server som gjør det enkelt for oss å bruke data fra eksterne servere. Det er to måter å skrive spørringer ved hjelp av data fra tilkoblede servere – direkte spørsmål som gjør all prosessering på SQL Server og OPENQUERY() som lar oss gjøre noen behandling i ekstern server. Koblet server er integrering og derfor bruker det er behov for ekstra omsorg. Planlegging og ytelse måling er må-være aktiviteter når du planlegger å bruke koblet server.

Likte dette innlegget? Gi dine venner ved å dele det!,
  • tweet
  • int
  • int
  • int
  • int
  • int
  • int
  • int

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *