piektdiena, 2012. gada 22. jūnijs

Utilītprogramma: sqlcmd

sqlcmd komandvirknes utilītprogramma tiek izmantota, lai izpildītu T-SQL komandas uz SQL Server no komandvirknes. Šī utilīta var tikt izmantota gan kā SQL uzdevuma (job) solis, gan arī, piemēram, DB veidošanas skriptu izpildei (raksta beigās ir automatizētas datu bāzes uzstādīšanas piemērs).

Šajā rakstā apskatīti daži špikerīši šīs utilītprogrammas izmantošanai- sākumā kā laist no komandvirknes, kā sqlcmd izmantot (pārbaudīt) no komandvirknes un SSMS un arī neliels skripts datu bāzes automatizētai izveidei.

Uz datora jābūt uzstādītam SQL Server vai SQL Server klienta rīkiem (instalējot SSMS tiek automātiski instalēts arī sqlcmd), vai arī jāuzstāda komandvirknes utilītprogramma (no Microsoft® SQL Server® 2008 R2 SP1 Feature Pack, fails "SqlCmdLnUtils.msi").

MSDN sqlcmd izmantošanas piemēri atrodami sqlcmd How-To Topics.

sqlcmd palaišana no komandvirknes
Lai pieslēgots lokālajai instancei izmantojot windows autentifikāciju, pietiek komandvirknē ievadīt "sqlcmd" un nospiest Enter. Bet nu šķiet praksē biežāk notiek pieslēgšanās citai instancei. Sintakse šādā gadījumā ir reģistrjūtīga:
sqlcmd -S ServerName -U UserName -P UserPassword
izskatās šādi:

Nenorādot lietotāja vārdu un paroli, notiek pieslēgšanās izmantojot Windows autentifikāciju. Windows autentifikācija ir rekomendētais veids, kā pieslēgties SQL Serverim.

Pēc pieslēgšanās serverim, ir iespējams ievadīt SQL komandas, kas tiek izpildītas pēc "go" komandas ievades (nevis Enter taustiņa nospiešanas) - skatīt nākamo sadaļu "sqlcmd izmantošana no komandvirknes".

Vēl daži no vērtīgākajiem norādāmajiem sqlcmd parametriem ir -b, -m, -q, -Q-i un -o (* īss apraksts raksta pašās beigās).

Pieslēgties serverim izmantojot windows autentifikāciju un izpildīt vaicājumu un izvadīt rezultātus komandvirknē un iziet no sqlcmd:
sqlcmd -S ServerName -Q "select 1"
Izpildīt visus skriptus no my.sql faila un izvadīt rezultātus results.txt:
sqlcmd -S evk-sql -i c:\test\my.sql -o c:\test\results.txt

sqlcmd izmantošana no komandvirknes
Iepriekšējā sadaļā (sqlcmd palaišana no komandvirknes) aprakstīju, kā palaist sqlcmd, kā palaist skriptus gan no faila, gan pa tiešo ievadot sqlcmd vidē un kā izvadīt rezultātus failā.
sqlcmd utilītprogrammā var izpildīt jebkuru T-SQL vaicājumu. Droši vien ir noderīgi zināt, ka atšķirībā no SSMS, sqlcmd var apstrādāt ļoti lielus failus (piemēram, datu importam vai datu bāzes objektu izveidei).
sqlcmd bez T-SQL ir pieejamas papildus komandas. Ļoti nozīmīga ir iespēja izmantot mainīgos, iespēja norādīt un izpildīt citus T-SQL failus.
lai izveidotu temporālu tabulu, ievietotu tajā vērtību, atlasītu datus un dzēstu izveidoto tabulu, es sqlcmd varu ievadīt šādu komandu:
:setvar myTable tempTable
Go
Create Table #$(myTable)(i int);
insert into #$(myTable)(i)values(1)
Select * From #$(myTable);
Drop Table #$(myTable)
Šajā skriptā  [$(myTable)] ir mainīgais, kam sākumā izmantojot speciālo komandu [:setvar] tiek uzstādīta vērtība [tempTable]. tas izskatās šādi (konekcija uz lokālo serveri ar Windows autentifikācija):
 

Uz SQL Server tika izpildīta šāda komanda (mainīgais aizstāts ar vērtību pirms izpildes):
Create Table #tempTable(i int);
insert into #tempTable(i)values(1)
Select * From #tempTable;
Drop Table #tempTable
Lai nu kā, svarīgākais- sqlcmd vidē ir pieejamas papildus komandas. Plašākus aprakstus var lasīt sqlcmd dokumentācijā. Sakarīgs izmantošanas piemērs būs redzama zemāk- "Datu bāzes uzstādīšana, izmantojot sqlcmd".

sqlcmd izmantošana no SSMS
Kā jau minēts, sqlcmd skriptos var iekļaut mainīgos un speciālas komandas, kas nav T-SQL kods. Lai varētu vieglāk notestēt, var izmantot SSMS iespēju izpildīt vaicājumus gluži kā no sqlcmd komandvirknes. Lai to izdarītu, jāiet Query -> SQLCMD Mode:


Šo iespēju vērtīgi izmantot testējot sqlcmd skriptu. Izskatās šādi:


Automatizēta datu bāzes uzstādīšana, izmantojot sqlcmd
Šeit aprakstīta datu bāzes automatizēta uzstādīšana izmantojot sqlcmd utilītprogrammu. Piemērā tiek izmantoti vairāki faili, dots to pilns teksts.
Šos failus var arī lejupielādēt- AutomatizetasDBInstalacijasPiemers.zip.


Install.bat fails- var redzēt, kā notiek interaktīva parametru uzstādīšana (no kuriem parametrs db tiek izmantoti citos failos), IF nosacījumu pārbaude, kļūdu pārbaude. Instalācijas vadībai tiek izmantots fails Setup.sql fails:
@echo off
cls
set laist=n
set /p server="SQL Servera instance: " %=%
set /p db="Datu baze: " %=%
set /p laist="Vai veidot [%db%] uz instances [%server%]? ("Y" lai turpinatu): " %=%
IF [%laist%] == [Y] GOTO Instal
IF [%laist%] == [y] GOTO Instal

Echo Instalacija atcelta
pause
Exit

:Instal
Echo notiek instalacija.. %server%, %db%
sqlcmd -S %server% -v db=%db% -i Setup.sql -b
IF ERRORLEVEL = 1 GOTO ERROR
echo ======================
echo Uzstadisana veiksmiga!
pause
Exit

:ERROR
echo ===============================
echo Uzstadisanas laika radas kluda!
pause
exit
Setup.sql sql fails, kurā tiek izmantotas arī sqlcmd speciālās komandas. Tiek izsaukts fails "Variables.sql" (:r komanda un tai sekojošs faila nosaukums. izmantojot sqlcmd mode no SSMS ir jānorāda pilns ceļš līdz failam), kurā ir sadefinēti uzstādīšanas laikā nepieciešamie mainīgie (šajā gadījumā gan tie nav vajadzīgi, tāpēc tur nekā nopietna nav). Tiek veiktas dažas pārbaudes un kļūdas gadījumā instalācija tiek pārtraukta (-b parametrs sqlcmd utilītprogrammai)
set nocount on;
:r Variables.sql

IF(IS_SRVROLEMEMBER ('sysadmin') = 0)
    RAISERROR ('Jums nav pietiekamas tiesības (jābūt sysadmin)!', 16, 11);
IF (DB_ID('$(DB)') > 0)
    RAISERROR ('$(DB) datu bāze jau ir izveidota!', 16, 11);
Go

:r Script.sql
Go
Variables.sql failā tiek uzstādīti mainīgie. Te ideja tāda, ka pēc parametru uzstādīšanas, to vērtības var izmantot visos pārējos failos.
:setvar dummyParam "Hello world!"
print 'Failā varibables.sql uzstādīju dummyParam = $(dummyParam)'
Script.sql failā ir pati datu bāzes, tabulas izveide un datu ievietošana. Papildinot Setup.sql tādi skripti var būt tik daudz, cik daudz vien ir vēlme izmantot.
Create Database $(db)
print 'datu bāze [$(db)] ir izveidota!'
Go
Use $(db)
Go
Create Table dbo.MyTable(i int);
insert into dbo.MyTable(i) values(1)

Select * From dbo.MyTable;
Go
Un izmantošana notiek laižot failu "Install.bat".
Atcelta instalācija:

Neiziet validāciju:

Veiksmīga insalācija:


* -b, -m, -q, -Q,  -i un -o, -v īss apraksts
  • -b nozīmē, ka notiekot kļūdai tiek iziets no sqlcmd un tālākā SQL komandu izpilde nenotiek. 
  • -m var konfigurēt, no kura līmeņa kļūdas izvadīt rezultātos. piemēram, [-m 10] nozīmē, ka informatīvie paziņojumi netiks izvadīti (piemēram, print komandas ziņojumi).
  •  -q izmanto, lai izpildītu vaicājumu un paliktu sqlcmd vidē. Piemēram ['-q "select 1"]
  •  -Q izmanto, lai izpildītu vaicājumu un paliktu sqlcmd vidē. Piemēram ['-Q "select 1"]
  •  -i izmanto, lai izpildītu vaicājumus no norādītā faila. Piemēram [-i c:\test\my.sql]
  •  -o izmanto, lai izvadītu vaicājuma rezultātus vailā. Piemēram [-o c:\test\results.txt]
  •  -v izmanto, lai uzstādītu mainīgā vērtību. Piemēram [-v myTable=tempTable

Nav komentāru:

Komentāra publicēšana