„SQL Server“ turi vieną geriausių valdymo įrankių, pavadintą „SQL Server Management Studio“ (dar žinomas kaip SSMS). Jame yra daug funkcijų, kurios palengvina kūrėjų ir DBA gyvenimą. Tačiau kartais yra problemų, kurių negalima išspręsti naudojant „SQL Server Management Studio“. Ypač kai reikia paleisti ad-hoc SQL scenarijus arba atkurti sudužusių SQL serverio egzempliorius. Tokiais naudojimo atvejais galite naudoti SQLCMD.
Tai yra Devarto remiamas straipsnis. Šiuo metu Devart yra viena iš pirmaujančių duomenų bazių valdymo programinės įrangos ir ALM sprendimų, skirtų populiariausiems duomenų bazių serveriams, tiekėjų.
Darbo su SQLCMD pradžia
Šiame straipsnyje mes sužinosime apie SQLCMD. Tai komandinės eilutės įrankis, kurį galima naudoti šioms užduotims:
- Vykdykite ad-hoc SQL užklausas ir saugomas procedūras vietiniuose ir nuotoliniuose serveriuose
- Eksportuokite SQL užklausos išvestį į tekstinius arba CSV failus
- Tvarkykite ir administruokite SQL serverio egzempliorius ir duomenų bazes sistemoje Windows ir Linux
Kad užklausų rašymas SSMS būtų greitesnis ir lengvesnis, taip pat patobulintume ją papildomomis duomenų bazių valdymo ir administravimo funkcijomis, patobulinome dbForge SQL įrankiaipriedų paketas, sklandžiai integruotas į SSMS.
Dabar pradėkime nuo diegimo.
Norėdami įdiegti SQLCMD paslaugų programą, diegdami SQL Server turite pasirinkti vietinius SQL serverio kliento įrankius. Taip pat galite jį įdiegti atskirai naudodami SQL serverio diegimo tvarkyklę.
SQLCMD įrankį galima iškviesti tiesiog įvedus SQLCMD „PowerShell“ arba komandų eilutėje. Parinkčių, kurias galima naudoti su SQLCMD, sąrašą galite pamatyti vykdydami šią komandą:
PS C:\Users\nisar> SQLCMD -?
Taip atrodo komandinės eilutės išvestis.
Prisijungimas prie SQL serverio naudojant SQLCMD
Dabar supraskime, kaip prisijungti prie SQL serverio egzemplioriaus naudojant SQLCMD.
1 pavyzdys: Prisijunkite prie numatytojo SQL serverio egzemplioriaus
Norėdami prisijungti prie SQL serverio vietiniame kompiuteryje, naudokite šią SQLCMD komandą:
C:\Users\nisar>sqlcmd -S Nisarg-PC
Kaip matote, komandos išvestis yra 1> kuri rodo, kad esate prisijungę prie SQL serverio.
Atminkite, kad jei jungiatės prie numatytojo SQL serverio egzemplioriaus vietiniame kompiuteryje, jums nereikia aiškiai nurodyti pagrindinio kompiuterio pavadinimo / serverio pavadinimo.
2 pavyzdys: Prisijunkite prie pavadinto SQL serverio egzemplioriaus
Dabar patikrinkime kitą pavyzdį, rodantį, kaip prisijungti prie pavadinto SQL serverio egzemplioriaus.
Norėdami prisijungti prie pavadinto SQL serverio egzemplioriaus, turite nurodyti parametrą -S (serverio pavadinimas). Pavyzdžiui, jei jūsų serverio pavadinimas yra Mano serveris o įvardytas atvejis yra SQL2017komanda prisijungti prie jo naudojant SQLCMD būtų tokia:
C:\>sqlcmd -S Nisarg-PC\SQL2019
Čia yra išvestis.
3 pavyzdys: Prisijunkite prie SQL serverio naudodami Windows autentifikavimą ir SQL serverio autentifikavimą
Dabar pažiūrėkime, kaip prisijungti prie SQL serverio naudojant Windows ir SQL Server autentifikavimą.
Norėdami prisijungti prie SQL serverio naudodami SQLCMD, galite naudoti Windows autentifikavimą ir SQL serverio autentifikavimą. Jei norite naudoti SQL serverio autentifikavimą, turite nurodyti parinktis -U (vartotojo vardas) ir -p (slaptažodis). Jei nenurodysite slaptažodžio, SQLCMD paslaugų programa paprašys įvesti slaptažodį. Toliau pateikta ekrano kopija tai iliustruoja.
Darbas su SQLCMD interaktyviu režimu
Šiame skyriuje pamatysime, kaip paleisti SQLCMD interaktyviuoju režimu, vykdyti SQL užklausas ir peržiūrėti išvestį. Interaktyvus režimas leidžia rašyti SQL sakinius ir komandas. Pradėkime nuo to, kaip prisijungti prie SQL serverio, įjungti interaktyvųjį režimą ir vykdyti užklausas SQLCMD.
1 pavyzdys: užpildykite duomenų bazių sąrašą su savininkais
Pirmiausia prisijunkite prie duomenų bazės serverio naudodami šią komandą:
C:\>sqlcmd -S Nisarg-PC -U sa -p
Kai prasidės interaktyvi sesija, SQLCMD paslaugų programoje paleiskite šią SQL užklausą:
use master;
select a.name,b.name from sys.databases a inner join sys.server_principals b
on a.owner_sid=b.sid where a.name not in ('ReportServer','ReportServerTempDB')
and a.database_id>5;
Čia yra užklausos išvestis.
Kaip matote, aukščiau pateikta užklausa užpildė duomenų bazių sąrašą su duomenų bazių savininkais.
2 pavyzdys: patikrinkite esamą duomenų bazę
Pirmiausia prisijunkite prie duomenų bazės serverio ir vykdykite šią užklausą:
Select DB_NAME()
Go
Tai yra užklausos išvestis.
Užklausa grąžino pagrindinę duomenų bazę, nes nenustačiau numatytosios prisijungimo duomenų bazės, kurią naudoju prisijungdamas prie SQL serverio.
3 pavyzdys: Vykdykite SQL užklausas
Galite paleisti SQL užklausas naudodami SQLCMD nurodydami -K parametras. Pavyzdžiui, norite peržiūrėti lentelių, sukurtų Mokyklos valdymas duomenų bazėje naudojant SQLCMD. Komanda turėtų būti parašyta taip:
C:\>sqlcmd -S Nisarg-PC -d SchoolManagement -Q "select name from sys.tables"
Pažvelkite į užklausos išvestį.
Panašiai galite paleisti ir kitas užklausas. Atminkite, kad prisijungimo vardas, kurį naudojate prisijungdami prie SQL serverio, turi turėti reikiamą duomenų bazės leidimą.
Darbas su SQLCMD komandų eilutėje
Čia pamatysime, kaip vykdyti SQL scenarijus per komandų eilutę. Ši funkcija naudinga, kai norite vykdyti automatizavimo užduotis, masines operacijas ir ilgai vykdomas užklausas, kurioms nereikia jokio vartotojo įvesties.
Sukūriau SQL scenarijų, kuriame yra SQL užklausa, kuri naudojama užpildyti objektų, sukurtų „WideWorldImporters“. duomenų bazėje. Užklausa yra tokia:
use [WideWorldImporters]
go
select name, type_desc, create_date from sys.objects where type_desc <>'SYSTEM_TABLE'
Pridėkite aukščiau pateiktą užklausą prie SQL scenarijaus pavadinimu sp_get_db_objects.sql. Dabar eksportuokime išvestį į tekstinį failą pavadinimu duomenų bazės_objektai.txt.
Tam naudosime šias parinktis:
- -o: nurodykite paskirties failą. Šioje demonstracijoje paskirties tekstinis failas vadinamas WideWorldImportores_objects.txt.
- -i: nurodykite SQL scenarijaus vietą. Šioje demonstracijoje vadinamas SQL scenarijus DBObjects.sql.
Dabar vykdykime šią komandą:
sqlcmd -S Nisarg-PC -i D:\Scripts\DBObjects.sql -o D:\Scripts\WideWorldImportores_objects.txt
Sėkmingai įvykdžius komandą, laikas peržiūrėti tekstinį failą.
Kaip matote aukščiau esančioje ekrano kopijoje, užklausa buvo sėkmingai įvykdyta.
Dabar paimkime kitą pavyzdį. Čia sužinosime, kaip sukurti atsarginę kopiją StackOverflow2010 naudojant SQL scenarijų. Atsarginės kopijos kūrimo užklausa yra tokia:
use master
go
backup database [Stackoverflow2010] to disk ='D:\SQLBackups\Stackoverflow2010.bak' with compression, stats=5
Atsarginės kopijos komandą išsaugojau SQL scenarijuje, pavadintame StackOverflow2010_backup_script.sql. Norėdami paleisti scenarijų, SQLCMD komanda bus tokia:
1 ekrano kopija:
Kaip matote aukščiau esančioje ekrano kopijoje, atsarginė kopija buvo sukurta.
2 ekrano kopija:
SQLCMD naudojimas SQL Server Management Studio
Norėdami naudoti SQLCMD SSMS, pirmiausia turite įjungti SQLCMD režimą. Norėdami tai padaryti, pasirinkite Užklausa iš meniu ir pasirinkite SQLCMD režimaskaip parodyta šiame paveikslėlyje:
Jei norite nustatyti SQLCMD režimą pagal numatytuosius nustatymus, eikite į Įrankiai → Galimybės. Į Galimybėspasirinkite Užklausos vykdymas → SQL serveris → Generolas ir pasirinkite Pagal numatytuosius nustatymus atidarykite naujas užklausas SQLCMD režimu žymimasis langelis.
Dabar pažiūrėkime, kaip jį naudoti.
Pavyzdžiui, aš noriu gauti visus įrašus Įrašai lentelė Stackoverflow2010 duomenų bazėje. Norėdami tai padaryti, užklausą reikia parašyti taip:
:SETVAR TABLENAME "Posts"
:SETVAR DATABASENAME "Stackoverflow2010"
use $(DATABASENAME);
select count(1) from $(TABLENAME);
GO
Dabar vykdykime užklausą. Toliau pateiktoje ekrano kopijoje parodyta užklausos išvestis.
Dabar pažiūrėkime, kaip naudoti SQLCMD „PowerShell“.
SQLCMD naudojimas „PowerShell“.
Galite iškviesti SQLCMD naudodami „PowerShell“. Norėdami tai padaryti, turite įdiegti „PowerShell“, skirtą SQL serveriui. Galite skaityti Šis straipsnis Norėdami sužinoti daugiau apie PowerShell for SQL Server ir kaip ją įdiegti.
Paimkime paprastą pavyzdį. Tarkime, aš noriu gauti saugomų procedūrų sąrašą „WideWorldImporters“. duomenų bazėje. „PowerShell“ komanda yra tokia:
PS C:\WINDOWS\system32> invoke-sqlcmd -database wideworldimporters -query "select name from sys.procedures"
Čia yra išvestis.
Kitas pavyzdys rodo, kaip eksportuoti SQL scenarijaus išvestį į tekstinį failą naudojant sqlps. Tarkime, kad norime eksportuoti SQL serverio agento užduočių sąrašą. Aš sukūriau scenarijų pavadinimu SQLJobs.sql kuri nuskaito SQL užduočių sąrašą. Scenarijuje yra ši T-SQL komanda:
use [msdb]
go
select name, description,date_created from Sysjobs
Norėdami paleisti scenarijų, vykdau šią komandą PowerShell for SQL Server.
invoke-sqlcmd -inputfile "D:\Scripts\SQLJobs.sql" | Out-File -FilePath "D:\Scripts\SQLJobs_List.txt"
Kai komanda bus baigta, atidarau išvesties failą, kuris atrodo taip.
Išplėstinė SQLCMD technika
Štai keletas pažangių metodų, kurie gali padėti efektyviau naudoti SQLCMD. Paaiškinsiu juos paprastais pavyzdžiais.
1 pavyzdys: Rodyti klaidų pranešimus pagal klaidų sunkumo lygį
Šiame pavyzdyje parodyta, kaip rodyti klaidos pranešimą pagal jo sunkumo lygį. Šis metodas gali būti naudojamas pridedant -m variantas. Tarkime, kad vykdote SELECT užklausą neegzistuojančiam duomenų bazės objektui. Komanda grįš „Neteisingas objektas“o tos klaidos sunkumo lygis yra 16. Žr. toliau pateiktą ekrano kopiją.
Pažvelkime į klaidą, kurios sunkumo lygis yra 15 – sintaksės klaidą
Kaip matote aukščiau esančioje ekrano kopijoje, klaidos sunkumas yra 15, todėl SQLCMD nerodė jokios klaidos.
2 pavyzdys: Išeikite iš SQLCMD seanso, kai įvyksta klaida
Šiame pavyzdyje parodyta, kaip išeiti iš SQLCMD seanso, kai komandoje arba užklausoje įvyksta klaida. Norėdami tai padaryti, turite nurodyti -b variantas. Tarkime, kad norite išeiti iš SQLCMD, kai užklausa susiduria su a „duomenų bazė neegzistuoja” klaida.
3 pavyzdys: Priimkite vartotojo įvestį
Šiame pavyzdyje parodyta, kaip priimti vartotojo įvestį vykdant T-SQL scenarijų. Tai apima SQLCMD kintamųjų scenarijų rašymą. Norėdamas tai parodyti, sukūriau scenarijų, kuris užpildo oficialų šalies pavadinimą. Scenarijus naudoja „WideWorldImporters“. duomenų bazė ir taikymas.Šalys stalo. Scenarijaus turinys yra toks:
use [WideWorldImporters]
Go
select CountryName, FormalName from application.countries where CountryName=$(CountryName)
Go
Dabar aš išsaugosiu scenarijų ir vykdau jį naudodamas šią SQLCMD komandą:
sqlcmd -S Nisarg-PC -v CountryName="India" -i D:\Scripts\Asia_Countries.sql
Čia yra išvestis.
Kaip matote, užklausa grąžino formalų pavadinimą Indija.
Išvada
Šiame straipsnyje sužinojote apie SQLCMD komandą ir kaip ją naudoti su įvairiais pavyzdžiais. SQLCMD yra galingas įrankis, galintis padėti paleisti scenarijus, eksportuoti išvestį į įvairius failus ir administruoti SQL serverį. Taip pat galite naudoti DAC (Dedicated Admin Connection), kuri padeda pasiekti pažeistus arba sugadintus duomenų bazių serverius.
Galiausiai visada galite patobulinti SSMS atsargines galimybes naudodami išmanų kodo užbaigimą ir formatavimą, šaltinio valdymą, vienetų testavimą, komandinės eilutės automatizavimą ir daugybę kitų naudingų dalykų, kuriuos galima rasti paketuose, pvz., dbForge SQL įrankiai.
Nauji vartotojai gali nemokamai išbandyti važiavimą 30 dienų. Įdiegę paketą visi priedai bus patogiai pasiekiami tiek iš SSMS meniu, tiek iš Object Explorer. Jie sutaupo tiek laiko, kad negaliu jų nerekomenduoti.