Wywołaj sqlcmd z PowerShell

Zadanie jest proste: mamy skrypt z poleceniami SQL, który chcemy wywołać przez sqlcmd. Ale – w skrypcie wykorzystujemy zmienną, która na dodatek zawiera ścieżkę do katalogu. Jako przykład niech posłuży taki fragment zapisany w pliku SELECT.sql:

SELECT Imie = 'Bartek', Zmienna = '$(ScriptPath)'

Wywołanie z poziomu cmd nie stwarza problemów:

C:\> cd tmp
C:\tmp> sqlcmd -r1 -v ScriptPath="C:\tmp" -i SELECT.sql -S Serwer-f 1250
Bartek Zmienna
------ -------
Bartek C:\tmp

Poszczególne przełączniki oznaczają:

  • -r1 – chcę zobaczyć błędy na ekranie
  • -v – przekazuję zmienną o nazwie ScriptPath z wartością zawierającą jakąś ścieżkę
  • -i – nazwa skryptu wejściowego
  • -S – mój serwer
  • -f – strona kodowa

I super, a jeśli potrzebujemy uruchomić w PowerShell?

PS C:\tmp> sqlcmd -r1 -v ScriptPath="C:\tmp" -i SELECT.sql -S Serwer -f 1250
Sqlcmd: ':\tmp': Invalid argument. Enter '-?' for help.PS C:\tmp>

Czemu tak?
Czytaj dalej

Konfiguracja SSMS pod kątem prezentacji

Bardzo często stawiam nowe maszyny wirtualne pod kątem prowadzonych testów czy prezentacji. Za każdym razem konfiguruję od nowa ustawienia SQL Server Management Studio i za każdym razem muszę sobie przypominać gdzie się klikało daną opcję, albo co tam jeszcze było do zrobienia. Tu spisuję te ustawienia w jednym miejscu.
Czytaj dalej

SNAPSHOT vs READ COMMITTED

We wrześniu prowadziłem krótki warsztat SQL. Podczas poruszania tematu poziomów izolacji transakcji padło pytanie, na które nie potrafiłem udzielić odpowiedzi. Chodziło o interakcję dwóch poziomów izolacji: SNAPSHOT i READ COMMITTED, a ja z trybem SNAPSHOT miałem do czynienia głównie w książkach i niestety nie pamiętałem dokładnie co się stanie.

„Załóżmy, że mamy dwie sesje o poziomach izolacji SNAPSHOT i READ COMMITTED, które operują na tym samym zbiorze danych. Sesja nr 1 (SNAPSHOT) odczytuje dane, w tym czasie sesja nr 2 (READ COMMITTED) aktualizuje dane – np jeden rekord. Po tej aktualizacji sesja nr 1 chce usunąć rekord zaktualizowany w sesji nr 2. Co się stanie? Jaki będzie wynik?”

Przeprowadźmy test. Zakładam nową bazę, w której włączam obsługę trybu SNAPSHOT oraz tabelę, w której będę modyfikował jeden rekord. Czytaj dalej