Querying MySQL från SQL Server med länkad server

posted in: Articles | 0

SQL Server har intressanta funktioner som anropar länkade servrar. Det handlar om att länka andra databaser till SQL Server och använda deras data som det är lokalt. Det finns många kraftfulla open-source-system skrivna på PHP och de använder mestadels MySQL som databas. Det här blogginlägget visar hur du länkar MySQL-databasen till SQL Server och hur du använder länkad server i SQL-frågor.

vad är länkad server?,

länkad server i MSSQL är någon annan databasserver ansluten till given, vilket gör det möjligt att fråga och manipulera data i andra databaser. Genom exempel kan vi länka någon MySQL-databas till MSSQL och använda den nästan som någon annan databas på MSSQL.

bilden tas från MSSQL 2019 dokumentationssida
länkade servrar (databasmotor)

även om kommunikation med länkade servrar går igenom OLE DB leverantörer, det finns också OLE DB leverantör för ODBC och vi kan använda den om vår externa Databas inte har OLE DB leverantör.

OBS!, Länkad server är tillgänglig för hela SQL Server-instans. Det innebär att alla SQL Server-databaser kan använda länkad server för att hämta data.

länka MySQL till SQL Server

det är inte alltid enkelt och enkelt att lägga till länkad server och konfigurera anslutningsinställning.

För att få MySQL länkad till SQL Server behövde jag skapa ODBC DSN för MySQL (jag kallade det som MySQLCrm). Innan du går till nästa steg, se till att ODBC-datakällan fungerar.,

följ dessa steg för att länka MySQL till SQL Server:

  1. kör SQL Server Management Studio (SSMS)
  2. Anslut till din server
  3. expandera Server objekt nod från träd till vänster
  4. högerklicka på Länkade servrar
  5. Välj Ny länkad Server…

Du bör se följande dialogruta (eller lite annorlunda men tanken är densamma).

OBS! Var extra uppmärksam på vad du infogar i den här dialogrutan. Med denna uppsättning data gjorde jag länkarbete. Jag försökte olika värden och om något är en millimeter fel då anslutningen misslyckas., Det är en känslig dialogruta.

anslutningssträng till MySQL – databasen ska vara som visas här:

Var uppmärksam på OPTION=3-utan detta fick jag bara fel tillbaka när jag ansluter till länkad server.

försök att spara genom att klicka på OK och se om du kan bläddra till länkad server. Om du får fel högerklickar du på servern och väljer Egenskaper. Håll dialogrutan öppen, flytta till sidan serveralternativ. Ställ RPC och RPC ut inställningar till True.,

Jag är fortfarande inte så säker på vad dessa alternativ gör men några av dem som hade problem med länken till MySQL fick det att fungera efter att ha ställt RPC-s till true.

för att få frågande faktiskt att fungera behöver vi ytterligare en liten förändring som påverkar hela OLE DB-leverantören och därmed alla anslutningar som använder den. Öppna Providers nod under länkade servrar, högerklicka på MSDASQL (det här är OLE DB-leverantör för ODBC-datakällor) och välj Egenskaper.

markera rutan före nivå noll och klicka på OK för att spara ändringar.,

Fråga data från länkad server

det är faktiskt enkelt att fråga länkade databaser. Här är tabellen kunder från crmlinked databas i MySQL. Denna databas är kopplad till min SQL Server.

Syntax för att fråga länkad server är lite annorlunda än vad vi brukar skriva på SQL Server. Vi måste använda fyra delars namn: server.databastabell.schema.tabell. Eftersom det inte finns några scheman på MySQL och anslutningssträng anger databasnamn, kan vi lämna dessa ut som visas här.

select * from MYSQLCRM...customers

att köra denna fråga från SSMS ger följande utdata., Det är samma data som finns i MySQL kunder tabell.

naturligtvis kan vi också skriva mer komplexa frågor. Allt som ODBC kan hantera är okej.

blandning av data från lokal och länkad server

tabeller från länkad server är inte helt isolerade från lokala databastabeller och vyer. Vi kan också blanda data från lokal och länkad server.

för att visa blandad fråga över lokala och länkade tabeller kan vi skriva enkel fråga för att få alla kunder från lokala bord och deras kreditbetyg från länkade tabell.

kör denna fråga ger oss följande utgång.,

eftersom Mark inte finns i MySQL-databasen (anta att han är ny kund i e-shop och försäljningsavdelningen inte har honom ännu i sitt CRM-system) så har han inte kreditvärdighet tillgänglig. Kreditbetyg för John och Mary kommer från MySQL i nuvarande fall.

använda OPENQUERY() för att köra fråga i länkad server

exemplen ovan gör all databehandling på SQL Server. Det kan vara mycket optimalt om det finns mycket data i länkade serverns tabeller. Vi kanske vill – eller vanligtvis vill – att bearbeta vissa data i länkad server innan SQL Server startar lokal bearbetning., För detta har vi OPENQUERY().

här är exemplet på att använda OPENQUERY () – funktionen i blandad fråga. Vi måste ange länkat servernamn och SQL-fråga för att köras i länkad server när du ringer OPENQUERY (). Frågan i rött körs i MySQL-server och resultaten läses till SQL Server för vidare bearbetning.

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() är ett utmärkt sätt att optimera och påskynda blandade frågor genom att köra mer komplexa frågor över länkade serverdata i länkad server.,

inslagning

länkade servrar är kraftfullt inslag i SQL Server gör det enkelt för oss att använda data från externa servrar. Det finns två sätt att skriva frågor med hjälp av data från länkade servrar-direkta frågor som gör all bearbetning på SQL Server och OPENQUERY () som låter oss göra vissa bearbetning i fjärrservern. Länkad server är integration och därför använder den behöver extra omsorg. Planering och prestandamätning är måste-vara aktiviteter när du planerar att använda länkad server.

gillade det här inlägget? Ge dina vänner genom att dela den!,
  • tweet
  • dela
  • dela
  • dela
  • dela
  • dela
  • dela
  • dela

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *