Instalacja Service Pack 4 na SQL Server 2000 a zalecane uwierzytelnianie
Microsoft zaleca, żeby tam gdzie jest to możliwe używać uwierzytelniania windowsowego. Na maszynie, na której mam postawiony SQL Server 2000 mam w nim włączone właśnie takie uwierzytelnianie:
Podczas instalacji pakietu SP4 do tego serwera instalator informuje nas o tym, że hasło konta ‘sa’ jest puste oraz pyta, czy ustawić dla tego konta hasło, co zdecydowanie zaleca:
Zastanawiałem się, po co instalator nas uszczęśliwia na siłę i każe nam ustawiać hasło na koncie, którego nie używamy, ba, nie mamy nawet możliwości użyć tego konta, bo konta SQL-owe mamy wyłączone w instancji.
Wiedziałem że są ludzie (podobno jest ich całkiem spora ilość), którzy przy projektowaniu aplikacji posługują się właśnie kontem ‘sa’ jako służącym do logowania do bazy a logikę sprawdzania uprawnień realizują w aplikacji (czy nie wygląda to na wchodzenie we wrotkach na górkę tyłem?). Wiedziałem również, że jest grupa osób, która używa konta ‘sa’ z pustym hasłem. Wiem też, że są osoby, które należą do obu tych grup. Ale że jest sens w tym, co wypisał ten instalator to ciężko mi było znaleźć racjonalne wyjaśnienie.
Na szczęście miałem dziś okazję podzielić się ową refleksją z Pawłem Potasińskim (aka C3PO), który mi to szybko wyjaśnił
Nie pamiętam dokładnie słów, szło to jakoś tak: ‘zawsze ktoś może zmienić sposób uwierzytelniania i wtedy hasło dla konta ‘sa’ nie będzie już puste’. Przekonujące wyjaśnienie, zastosuję sugestię instalatora. I dodatkowo wypada się zabezpieczyć, żeby źli ludzie nie mieli takich uprawnień do naszego serwera, żeby mogli zmieniać sposób uwierzytelniania albo usuwać hasło z konta ‘sa’.
Upgrade SQL Server 2008 R2 Express x64 do edycji Developer x64
Po uruchomieniu instalatora SQL Server 2008 R2 i wybraniu opcji aktualizacji SQL Servera nie mamy możliwości aktualizacji z SQL Server 2008 R2 Express Edition (64 bit) do SQL Server 2008 R2 Developer Edition (64 bit). Żeby móc przeprowadzić taką aktualizację, musimy w instalatorze zaznaczyć pozycję ‘Maintenance’ oraz wybrać ‘Edition Upgrade’. Szczegóły na załączonym strzale do ekranu:
Sam proces aktualizacji przebiegł bez najmniejszego problemu, przeklikałem go automatycznie (tak, nie czytałem wszystkiego, tylko szukałem opcji ‘Select All’ lub ‘Next’) i zakończył się powodzeniem. Ponieważ trwało to wszystko bardzo krótko, co wydało mi się podejrzane, postanowiłem się temu przyjrzeć bliżej. I co się okazuje? Sam proces zakończył się powodzeniem, gdybym nie przeleciał instalatora na szybko, to bym pewnie zauważył to, do czego później doszedłem.
Zapytanie SELECT @@VERSION zwraca:
Microsoft SQL Server 2008 R2 (RTM) – 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
Co siedzi w logu poinstalacyjnym?
User Input Settings:
ACTION: EditionUpgrade
…
FEATURES: SQLENGINE,REPLICATION,FULLTEXT,RS,BIDS,SSMS,SNAC_SDK,OCS,CE_RUNTIME,CE_TOOLS,SNAC,BROWSER,WRITER
Brakuje mi tu chociażby usług BI-owych. SQL Server Agent też się nie chce odpalić
Ale już bazę o rozmiarze początkowym 15 GB utworzył
No ale sam rozmiar bazy nie jest tu dla mnie benefitem, dla którego będę zostawiał takiego potworka zainstalowanego.
Teoretycznie mam 2 opcje do wyboru: odinstalować to coś i zainstalować od nowa, jak należy lub doinstalować składniki do tego co jest. Doinstalowanie składników wiąże się z tym, że mój serwer SQL-owy będzie działał w trybie WOW64 (o ile się wszystko ładnie doinstaluje).
Wybór jest prosty. Zaorać Expressa i postawić nówkę sztukę Developera
Wniosek? Czytajmy komunikaty, nieważne że to nie produkcja oraz że to co widzimy, nie zawsze jest tym czym jest. Brak pytania o doinstalowanie komponentów jest w przypadku tej wersji aktualizacji mówiąc delikatnie niedopracowaniem.
Energetyczny i darmowy szablon Power Pointa o tematyce SQL Server 2008
Mladen Prajdić na swoim blogu zamieścił szablon do Power Pointa o tematyce SQL Server. Mnie osobiście się on podoba z dwóch podobów: ma ciemną tonację oraz jako grafiki ma wstawione te ogniste kule z Experience The Energy. Szablon jest autorstwa Mladena i jest do darmowego wykorzystania.
Link do posta: http://weblogs.sqlteam.com/mladenp/archive/2009/05/07/Free-SQL-Server-2008-Powerpoint-dark-template.aspx (Free SQL Server 2008 Powerpoint dark template)
Link do szablonu: http://www.sqlteam.com/downloads/sqlserver2008_dark.zip
Link do darmowych narzędzi zebranych przez Mladena (jako przypomnienie) mogących odpicować nasze konsolety: http://weblogs.sqlteam.com/mladenp/archive/2007/11/20/Free-SQL-Server-tools-that-might-make-your-life-a.aspx (Free SQL Server tools that might make your life a little easier)
Funkcja Trim w Excelu oraz w VBA to nie to samo
Funkcja Trim (znana również pod nazwą USUŃ.ZBĘDNE.ODSTĘPY) ma za zadanie usuwać wszystkie nadmiarowe spacje z tekstu wejściowego oraz z prawej i lewej strony tekstu. W środku zostawia tylko pojedyncze spacje. Ciekawostką jest fakt, że wbudowana funkcja arkuszowa tak właśnie działa. Inaczej się sprawa ma z funkcją Trim dostępną z poziomu VBA. Celowo nie napisałem, że chodzi o tę samą funcję, bo… działa trochę inaczej. Funkcja Trim wbudowana w VBA usuwa tylko spacje z prawej i lewej strony podanego tekstu, jest tylko połączeniem funkcji LTrim oraz RTrim.
Dla zobrazowania różnicy prosty przykład:
Sub TestTrimFunctions()
Dim StringWithRedundantSpaces As String
Dim StringWithoutRedundantSpaces1 As String
Dim StringWithoutRedundantSpaces2 As String
StringWithRedundantSpaces = " Exa mp le text with space s "
‘remove redundant spaces via VBA Trim function
StringWithoutRedundantSpaces1 = TrimVba(StringWithRedundantSpaces)
‘remove redundant spaces via worksheet built-in Trim function
StringWithoutRedundantSpaces2 = TrimWorksheetBuiltIn(StringWithRedundantSpaces)
‘compare our result – module level Option Compare setting doesn’t matter in this case
Debug.Print StringWithoutRedundantSpaces1 = StringWithoutRedundantSpaces2
End Sub
Function TrimVba(StrIn As String) As String
TrimVba = Trim(StrIn)
End Function
Function TrimWorksheetBuiltIn(StrIn As String) As String
TrimWorksheetBuiltIn = Application.WorksheetFunction.Trim(StrIn)
End Function
W oknie Immediate dostaniemy wartość… False. Ha! Znaleźliśmy błąd! Niekoniecznie. Na początku wygląda na błąd. Sprawdzenie w helpie funkcji dla arkusza oraz dla VBA wyjaśnia różnicę. Błąd to nie jest, tylko pytanie, dlaczego funkcja o tej samej nazwie i realizująca podobne działanie ma inną funkcjonalność w zależności od miejsca użycia?
Wniosek? Żeby uniknąć przykrych niespodzianek, zanim użyjemy w VBA funkcję, którą znamy z pracy z arkuszem (szczególnie jeśli pracujemy z Excelem w wersji EN) sprawdźmy ją w helpie, czy rzeczywiście jest to odpowiednik funkcji arkuszowej.
Zmienne środowiskowe – zapisywanie do arkusza Excela za pomocą VBA
Przy projektowaniu aplikacji w VBA czasami przydają się niektóre zmienne środowiskowe. Listę tych zmiennych można uzyskać w VBA za pomocą takiego oto krótkiego kodu:
Sub WypiszZmienneEnviron()
Dim i As Byte
i = 1
Do Until Environ(i) = ""
Cells(i, 1).Value = Environ(i)
i = i + 1
Loop
End Sub
Ten kod nie spełnia norm wysokiej jakości – dlaczego?
Deklarowanie typu danych w VBA za pomocą znaku dodawanego na końcu nazwy zmiennej
Zmienne w VBA możemy deklarować na 2 sposoby. Pierwszy z nich to jawnie określany typ zmiennej. Drugi to dodanie na końcu nazwy zmiennej znaku deklarującego typ.
Nie wszystkie typy można deklarować w ten sposób. Poniżej zestawienie typów danych, które można deklarować za pomocą znaku dodawanego na końcu nazwy zmiennej:
| Typ danych | Znak dekalrujący typ |
| Integer | % |
| Long | & |
| Single | ! |
| Double | # |
| Currency | @ |
| String | $ |
Przykład:
Sub AlternatywneDeklarowanieZmiennych()
Dim ZmiennaInteger%
Dim ZmiennaLong&
Dim ZmiennaSingle!
Dim ZmiennaDouble#
Dim ZmiennaCurrency@
Dim ZmiennaString$
Debug.Print TypeName(ZmiennaInteger) & "-"; TypeName(ZmiennaInteger%)
Debug.Print TypeName(ZmiennaLong) & "-"; TypeName(ZmiennaLong&)
Debug.Print TypeName(ZmiennaSingle) & "-" & TypeName(ZmiennaSingle!)
Debug.Print TypeName(ZmiennaDouble) & "-"; TypeName(ZmiennaDouble#)
Debug.Print TypeName(ZmiennaCurrency) & "-" & TypeName(ZmiennaCurrency@)
Debug.Print TypeName(ZmiennaString) & "-" & TypeName(ZmiennaString$)
ZmiennaInteger% = 2
ZmiennaInteger = ZmiennaInteger + 2
ZmiennaInteger% = ZmiennaInteger% + 1
End Sub
Do zmiennych deklarowanych za pomocą znaku dodawanego na końcu nazwy zmiennej możemy się odwoływać na 2 sposoby: podając jej nazwę wraz ze znakiem deklarującym typ oraz bez tego znaku, co pokazałem w 3 ostatnicj liniach przykładowej procedury. ZmiennaInteger% oraz ZmiennaInteger jest to ta sama zmienna.
Specyfikacje i ograniczenia programu Excel
Excel 2010 w porównaniu do Excela 2007 niewiele się zmieniło jeżeli chodzi o specyfikacje i ograniczenia. Dodano 3 nowe ograniczenia (związane z nowymi funkcjonalnościami) oraz zniesiono 3 limity dla punktów danych serii danych wykresów. Poniżej tabela zawierająca zestawienie specyfikacji i limitów – jak widać rewolucji nie ma.
| Specifications and limits | Excel 2010 | Excel 2007 |
| FEATURE | MAXIMUM LIMIT | MAXIMUM LIMIT |
| Open workbooks | Limited by available memory and system resources | Limited by available memory and system resources |
| Worksheet size | 1,048,576 rows by 16,384 columns | 1,048,576 rows by 16,384 columns |
| Column width | 255 characters | 255 characters |
| Row height | 409 points | 409 points |
| Page breaks | 1,026 horizontal and vertical | 1,026 horizontal and vertical |
| Total number of characters that a cell can contain | 32,767 characters | 32,767 characters |
| Characters in a header or footer | 255 | 255 |
| Sheets in a workbook | Limited by available memory (default is 3 sheets) | Limited by available memory (default is 3 sheets) |
| Colors in a workbook | 16 million colors (32 bit with full access to 24 bit color spectrum) | 16 million colors (32 bit with full access to 24 bit color spectrum) |
| Named views in a workbook | Limited by available memory | Limited by available memory |
| Unique cell formats/cell styles | 64 | 64 |
| Fill styles | 256 | 256 |
| Line weight and styles | 256 | 256 |
| Unique font types | 1,024 global fonts available for use; 512 per workbook | 1,024 global fonts available for use; 512 per workbook |
| Number formats in a workbook | Between 200 and 250, depending on the language version of Excel that you have installed | Between 200 and 250, depending on the language version of Excel that you have installed |
| Names in a workbook | Limited by available memory | Limited by available memory |
| Windows in a workbook | Limited by available memory | Limited by available memory |
| Panes in a window | 4 | 4 |
| Linked sheets | Limited by available memory | Limited by available memory |
| Scenarios | Limited by available memory; a summary report shows only the first 251 scenarios | Limited by available memory; a summary report shows only the first 251 scenarios |
| Changing cells in a scenario | 32 | 32 |
| Adjustable cells in Solver | 200 | 200 |
| Custom functions | Limited by available memory | Limited by available memory |
| Zoom range | 10 percent to 400 percent | 10 percent to 400 percent |
| Reports | Limited by available memory | Limited by available memory |
| Sort references | 64 in a single sort; unlimited when using sequential sorts | 64 in a single sort; unlimited when using sequential sorts |
| Undo levels | 100 | 100 |
| Fields in a data form | 32 | 32 |
| Workbook parameters | 255 parameters per workbook | 255 parameters per workbook |
| Items displayed in filter drop-down lists | 10 | not available in this version |
| Noncontiguous cells that can be selected | 2,147,483,648 cells | not available in this version |
| Calculation specifications and limits | ||
| FEATURE | MAXIMUM LIMIT | MAXIMUM LIMIT |
| Number precision | 15 digits | 15 digits |
| Smallest allowed negative number | -2.2251E-308 | -2.2251E-308 |
| Smallest allowed positive number | 2.2251E-308 | 2.2251E-308 |
| Largest allowed positive number | 9.99999999999999E+307 | 9.99999999999999E+307 |
| Largest allowed negative number | -9.99999999999999E+307 | -9.99999999999999E+307 |
| Largest allowed positive number via formula | 1.7976931348623158e+308 | 1.7976931348623158e+308 |
| Largest allowed negative number via formula | -1.7976931348623158e+308 | -1.7976931348623158e+308 |
| Length of formula contents | 8,192 characters | 8,192 characters |
| Internal length of formula | 16,384 bytes | 16,384 bytes |
| Iterations | 32,767 | 32,767 |
| Worksheet arrays | Limited by available memory | Limited by available memory |
| Selected ranges | 2,048 | 2,048 |
| Arguments in a function | 255 | 255 |
| Nested levels of functions | 64 | 64 |
| User defined function categories | 255 | 255 |
| Number of available worksheet functions | 341 | 341 |
| Size of the operand stack | 1,024 | 1,024 |
| Cross-worksheet dependency | 64,000 worksheets that can refer to other sheets | 64,000 worksheets that can refer to other sheets |
| Cross-worksheet array formula dependency | Limited by available memory | Limited by available memory |
| Area dependency | Limited by available memory | Limited by available memory |
| Area dependency per worksheet | Limited by available memory | Limited by available memory |
| Dependency on a single cell | 4 billion formulas that can depend on a single cell | 4 billion formulas that can depend on a single cell |
| Linked cell content length from closed workbooks | 32,767 | 32,767 |
| Earliest date allowed for calculation | January 1, 1900 (January 1, 1904, if 1904 date system is used) | January 1, 1900 (January 1, 1904, if 1904 date system is used) |
| Latest date allowed for calculation | December 31, 9999 | December 31, 9999 |
| Largest amount of time that can be entered | 9999:59:59 | 9999:59:59 |
| Charting specifications and limits | ||
| FEATURE | MAXIMUM LIMIT | MAXIMUM LIMIT |
| Charts linked to a worksheet | Limited by available memory | Limited by available memory |
| Worksheets referred to by a chart | 255 | 255 |
| Data series in one chart | 255 | 255 |
| Data points in a data series for 2-D charts | Limited by available memory | 32 |
| Data points in a data series for 3-D charts | Limited by available memory | 4 |
| Data points for all data series in one chart | Limited by available memory | 256 |
| PivotTable and PivotChart report specifications and limits | ||
| FEATURE | MAXIMUM LIMIT | MAXIMUM LIMIT |
| PivotTable reports on a sheet | Limited by available memory | Limited by available memory |
| Unique items per field | 1,048,576 | 1,048,576 |
| Row or column fields in a PivotTable report | Limited by available memory | Limited by available memory |
| Report filters in a PivotTable report | 256 (may be limited by available memory) | 256 (may be limited by available memory) |
| Value fields in a PivotTable report | 256 | 256 |
| Calculated item formulas in a PivotTable report | Limited by available memory | Limited by available memory |
| Report filters in a PivotChart report | 256 (may be limited by available memory) | 256 (may be limited by available memory) |
| Value fields in a PivotChart report | 256 | 256 |
| Calculated item formulas in a PivotChart report | Limited by available memory | Limited by available memory |
| Length of the MDX name for a PivotTable item | 32,767 | 32,767 |
| Length for a relational PivotTable string | 32,767 | 32,767 |
| Items displayed in filter drop-down lists | 10 | not available in this version |
| Shared workbook specifications and limits | ||
| FEATURE | MAXIMUM LIMIT | MAXIMUM LIMIT |
| Users who can open and share a shared workbook at the same time | 256 | 256 |
| Personal views in a shared workbook | Limited by available memory | Limited by available memory |
| Days that change history is maintained | 32,767 (default is 30 days) | 32,767 (default is 30 days) |
| Workbooks that can be merged at one time | Limited by available memory | Limited by available memory |
| Cells that can be highlighted in a shared workbook | 32,767 | 32,767 |
| Colors used to identify changes made by different users when change highlighting is turned on | 32 (each user is identified by a separate color; changes made by the current user are highlighted with navy blue) | 32 (each user is identified by a separate color; changes made by the current user are highlighted with navy blue) |
| Excel tables in a shared workbook | 0 (zero) - NOTE A workbook that contains one or more Excel tables cannot be shared. | 0 (zero) |
Specyfikacje i ograniczenia dla Excela 2010 oraz Excela 2007 zamieściłem również w arkuszu do pobrania.
Instalacja bazy Northwind ze skryptu
Kolega C3PO ostatnio trochę przewrotnie zapytał: ‘Gdzie te czasy, kiedy MS dawał skrypt instnwnd.sql, który stawiał bazę Northwind i zawsze działał bezbłędnie?
’
Nie wiem czy teraz MS nie daje, natomiast skrypt sobie u mnie grzecznie leży na dysku od dłuższego czasu. Chyba zaczynam myśleć jak starsi ludzie: ‘wszystko się przyda, kiedyś’. Kiedyś pewnie będę miała komórkę, taką drewnianą, póki co różne rzeczy upycham po komputerze.
Jeśli chcesz mieć na swoim SQL Serverze bazę w stylu retro, to bardzo proszę: skrypt do instalacji przykładowej bazy Northwind, z czasów królowania Shiloha
Zalety instalacji bazy Northwiind vs. AdventureWorks są następujące:
- jeden skrypt potrzebny do całej instalacji,
- wielkość skryptu 2 MB z groszkiem, w porównaniu do ponad 100 MB skryptu i danych potrzebnych do instalacji bazy AdventureWorks OLTP,
- wielkość bazy po instalacji to niecałe 5 MB bazy Northwind vs. ponad 180 MB bazy AdventureWorks OLTP,
- nieskomplikowany schemat bazy.
Do pewnego momentu nauki SQL-a ta przykładowa baza wystarczy
Sama instalacja polega na uruchomieniu skryptu i… voila! Skrypt instaluje bazy w tej samej lokalizacji, co baza master, więc jeśli chcemy mieć nasze przykładowe bazy w innej lokalizacji, to musimy w tym kawałku (linie 12-15):
DECLARE @device_directory NVARCHAR(520)
SELECT @device_directory = SUBSTRING(PHYNAME, 1, CHARINDEX(N’master.mdf’, LOWER(PHYNAME)) - 1)
FROM MASTER.DBO.SYSDEVICES
WHERE (NAME = N’master’)
… zakomentować instrukcję SELECT i poniżej wstawić przypisanie ścieżki, gdzie chcemy mieć zainstalowną przykładową bazę Northwind do zmiennej @device_directory, np:
SELECT @device_directory = ‘C:\moje_fajne_bazy\’
Parę sekund działania skryptu i już mamy gotową do użytku przykładową bazę Northwind.
Instalacja przykładowych baz AdventureWorks 2008 R2 (za pomocą skryptu)
Po pobraniu najnowszej wersji przykładowej bazy AdventureWorks 2008 R2 zaprojektowanej dla SQL Server 2008 R2 uruchamiamy plik AdventureWorks2008R2_RTM.exe, który zaczyna nam rozpakowywać ‘coś tam – coś tam’. Nie wnikamy w szczegóły…
… pewnie po rozpakowaniu pokaże nam się nowy instalator znany od wersji 2008 SQL Servera. Standardowo najpierw licencja (którą de facto już musieliśmy zakaceptować, żeby pobrać plik) do akceptacji i klikamy ‘Next’.
Instalator chwilę myśli, myśli, myśli… I za chwilę mówi: Sorry stary, dalej nie idę. Ludki z Redmond zapomnieli mnie dopracować
Treść tej wypowiedzi (lekko zmienionej) poniżej:
Po kliknięciu ‘OK’ instalator kończy pracę. Próbę powtórzyłem jeszcze dwukrotnie, wcześniej sprawdziłem czy serwisy eskuelowe chodzą bez zarzutu oraz czy mogę zalogować się via SSMS. Wszystko gra (oprócz tego niedopieszczonego instalatora).
Nie zastanawiałem się długo nad przyczyną błędu instalatora, tylko przypomniałem sobie pewnie odcinek Pomysłowego Dobromira, w którym Dobromir pomyślał: ‘A może by tak zainstalować bazy AdventureWorks’ ręcznie, ze skryptu?
No dobra, ale skąd wziąć skrypt i dane do wypełnienia tabel? Wracamy do momentu, kiedy uruchomiliśmy pobrany plik i teraz już wnikamy w szczegóły. Instalator nas nie zapytał (za to ludki z Redmond powinni dostać po łapkach) gdzie to rozpakować, tylko sam sobie wybrał miejsce. Jak je najłatwiej znaleźć? Przed zakończeniem pracy instalatora wyszukujemy folder zawierający plik z danymi o nazwie znanej z poprzedniej wersji. Możemy się zdarzyć, że nie trafimy, bo to przecież nowo zaprojektowana baza. Żeby mieć pewnik, używamy nazwy, którą udało nam się zapamiętać podczas rozpakowywania. Jak ktoś wolno czyta, zawsze pozostaje zrobienie zrzutu ekranu podczas rozpakowywania
Po zlokalizowaniu katalogu kopiuejmy zawartość do innej lokalizacji, ponieważ ten katalog zostanie usunięty po zakończeniu pracy instalatora.
W moim przypadku był to katalog C:\Users\[MójFajnyUżytkownik]\AppData\Local\Temp\WZSE0.TMP
Mamy już wszystkie (?) poptrzebne dane, możemy się zabrać za instalację najnowszych przykładowych baz AdventureWorks 2008 R2 na SQL Server 2008 R2 (Express Edition with Advanced Services).
No to do roboty! Uruchamiamy SQL Server Management Studio i z katalogu AdventureWorks 2008R2 OLTP otwieramy skrypt instawdb.sql, w którego nagłówku czytamy:
File: instawdb.sql
Summary: Creates the AdventureWorks 2008R2 OLTP sample database.
Date: June 14, 2008
Updated: October 13, 2009
SQL Server Version: 10.50.1341.02
Plik dosyć długo nieaktualizowany, wykonanie instrukcji SELECT @@VERSION pokazuje nam, że mamy dużo nowszy build niż serwer na którym przygotowywane były najnowsze przykładowe bazy.
Poniżej lista żądań skryptu:
– Be sure to enable FILESTREAM before running this script!
– Be sure to enable FULL TEXT SEARCH before running this script!
– WARNING: THIS SCRIPT MUST BE RUN IN SQLCMD MODE INSIDE SQL SERVER MANAGEMENT STUDIO. <<
Sprawdzamy czy mamy odblokowane FileStream oraz czu usługa FullTextSearch jest uruchomiona – W Expressie nazywa się MSSQLFDLauncher$NazwaInstancji, na liście usług widać ją jako SQL Full-text Filter Daemon Launcher (NazwaInstancji).
Następnie przełączamy się w tryb SqlCmd. Zgodnie z instrukcją w komentarzach skryptu odkomentowujemy 2 zmienne (zaznaczone) i podajemy swoje ścieżki w razie potrzeby.
Zmienna SqlSamplesDatabasePath – ścieżka do folderu, gdzie ma być zainstalowana przykładowa baza AdventureWorks 2008 R2 , zmienna SqlSamplesSourceDataPath – ścieżka do folderu, w którym znajdują się katalogi z danymi dla poszczególnych baz przykładowych. Przykładowo u mnie będzie to E:\instalacyjne\SQL Server\AdventureWorks\Samples\AdventureWorks 2008 R2\WZSE0.TMP. WZSE0.TMP to katalog, który podebraliśmy instalatorowi, zanim się na nas wypiął. Jeśli skopiowaliśmy całą zawartość utworzoną przez instalator, to powinniśmy mieć taką strukturę wewnątrz tego katalogu:
Jeżeli spróbujemy sparsować nasz skrypt, to otrzymamy komunikat:
Msg 911, Level 16, State 1, Line 2
Database ‘AdventureWorks2008R2′ does not exist. Make sure that the name is entered correctly.
** An error was encountered during execution of batch. Exiting.
Nie jest to żaden błąd, parser nie umie sobie doczytać, że baza której nie ma jest tworzona prawie na początku skryptu
Z tego co pamiętam uruchomienie całego skryptu nie spowoduje błędu, natomiast w tym przypadku uruchomimy do w 2 częściach – utworzenie samej bazy oraz napełnienie danymi. Nieee, szkoda czasu, odpalam zatem od razu cały skrypt.
Skrypt trochę pomieszał i po 52 sekundach (zapomniałem dorzucić węgla) napisał: Query executed successfully. Baza AdventureWorks 2008 R2 została zainstalowana. Pozostałe przykładowe bazy instalujemy w podobny sposób.
Schemat dla bazy AdventureWorks 2008 R2:
Zastanawia mnie tylko tylko opis na schemacie…
Logowanie do SQL Server, gdy brak jest domyślnej bazy
Jeżeli spróbujemy się zalogować do SQL Servera, na którym domyślna baza przypisana do użytkownika jest niedostępna (np. została usunięta), to serwer opluje nas takim oto komunikatem:
Komunikat może wydawać się przerażający z 2 powodów:
- prawdopodobnie nie spoedziewaliśmy się takiego komunikatu – oczywista oczystość
- jak pojawia się stres nie umiemy czytać komunikatów ze zrozumieniem – serio, tak jest.
Co należy zrobić w takim przypadku? Nie, nie trzeba przeinstalowywać SQL Servera
Nie ma też konieczności łączyć się z serwerem w mniej oczywisty sposób niż przez SQL Server Management Studio. Po potwierdzeniu komunikatu jak na obrazku należy kliknąć przycisk ‘Options’ kartę ‘Connection Properties’, jeśli się nie aktywowała sama.
Na samej karcie należy w pole ‘Connect to database’ wpisać nazwę bazy, do której chcemy się zalogować jako domyślnej. Oczywiście musimy znać tę nazwę I mieć wcześniej przyznany dostęp do bazy. Jeśli nie znamy nazwy żadnej innej bazy, to zawsze możemy spróbować zalgować siędo jednej z systemowych baz danych: master, model, msdb lub tempdb.