Full Text Search po polsku w SQL 2008

2011-09-30

Czy usługa Full Text Search jest dostępna dla języka polskiego? Tak. Odpowiednie dll-ki i inne pliki znajdują sie w instalacji Serwera SQL. Niestety nie jest to „czysta” implementacja Microsoft, dlatego trzeba ją ręcznie włączyć. Tutaj znajduje się opis jak. Przepis może trochę kłopotliwy, poprzez grzebanie w rejestrze, ale możliwy do przejścia. Może w następnej wersji będzie trochę lepiej:)

By Rafał Kraik in SQL

SQL Uprawnienia w tempdb

2011-09-25

Z czego właściwie wynika jakie mamy uprawnienia w bazie danych tempdb? Z jednej strony wydawałoby się, że jet to taki obiekt, gdzie każdy powinien móc prawie wszystko, czyli upraniwnienia powinny być duże, a z drugiej strony wszystko musi być uregulowane jakimiś uprawnieniami.

Jeżeli zajrzysz  do Security w bazie danych tempdb, to zobaczysz, że rola public, do której powinni należeć wszyscy użytkownicy ma prawo SELECT. Jak więc to się dzieje, że będąc zwykłym użytkownikiem mogę coś utworzyć w tempdb? Czytaj dalej »

By Rafał Kraik in SQL

Jak zmienić numer portu na którym nasłuchuje SQL Server?

2011-09-24

W SQL Server Configuration Manager należy przejść do SQL Sever Network Configuration -> Protocols for <nazwa instancji> i wybrać właściwości protokołu tcp. Jeżeli na pierwszej karcie pole Listen All jest włączone (yes), to oznacza to, że serwer nasłuchuje na wszystkich adresach IP i na karcie „IP Addresses” właściwosci protokołu TCP konfigurujesz w sekcji IPAll.

Tutaj w polu TCP Port możesz wpisać numer portu:

Czytaj dalej »

By Rafał Kraik in SQL

Podglądanie definicji obiektów w SQL

2011-09-22

Kiedy pracujesz z bazą danych sql to od czasu do czasu musisz podejrzeć jak został zbudowany pewien obiet, z  jakich kolumn składa się widok, jaki jest kod procedury czy też funkcji.

Możesz oczywiście kliknąć prawym przyciskiem myszy na znalezionych obiektach w object explorerze w sql server management studio i wybrać polecenie „view definition” lub „script object to…”, ale prawdę mówiąc ani to wygodne ani uniwersalne.
Sql server 2008  daje  specjalną funkcję nazywaną OBJECT_DEFINITION.Jako parametr przyjmuje ona  ID Obiektu, który możesz łatwo uzyskać wykorzystując funkcje OBJECT_ID np.

 OBJECT_ID(’HumanResources.vEmployee’)

Aby obejrzeć jaką instrukcją został utworzony widok wykonaj następujące polecenie:

 SELECT OBJECT_DEFINITION(OBJECT_ID(’HumanResources.vEmployee’)) Czytaj dalej »

By Rafał Kraik in SQL

Błedy konwersji typów SQL, zaokrąglenia, obięcia, przekroczenia zakresu typu

2011-09-16

Programując w SQL zastanawiasz się może czasami jaki typ wybrać dla zmiennych lub kolumn w tabelach. SQL Server sam podejmuje czasami decyzję o potrzebie wykonania pewnych konwersji i jeżeli pozwolisz mu zadzaiłać wg swoich algorytmów, to możesz dojść do błędów, które są trudne do zdebuggowania. Przedstawię tutaj kilka takich przykładów:

Źle:

DECLARE @smallValue smallint
SET @smallValue = 20000 + 20000
SELECT @smallValue

… w wyniku zwraca błąd.

Msg 220, Level 16, State 1, Line 3
Arithmetic overflow error for data type smallint, value = 40000.

Dlaczego?

Bo użyłeś typu smallint. Jeśli przewidujesz, że w obliczeniach może wyjść mniej niż -32 758 lub więcej niż 32 767 to lepiej użyj typu INT. Tinyint ma zakres od 0-255, int to już ponad 2 miliardy a bigint ponad 9 trylionów.

Jak poprawić ten przykład. Ot zmienić typ (więcej o typach i związanych z nimi przygodami znajdziesz na Mobilo / mobilo24 tutaj)?

DECLARE @smallValue int
SET @smallValue = 20000 + 20000
SELECT @smallValue

Źle:

DECLARE @date DATETIME
SET @date = '20110915 23:59:59.999′
SELECT @date

w wyniku zwraca 2011-09-16 00:00:00.000.

Dlaczego? Czytaj dalej »

By Rafał Kraik in Błedy, SQL

Dlaczego nie działa INSERT!? Dlaczego nie mogę zainicjować zadeklarowanej zmiennej!?

2011-09-16

Do tabeli chciałem dzisiaj wstawić kilka rekordów 'za jednym zamachem’. Można to zrobić poprzez polecenie:

INSERT Countries VALUES
(’EN’, 'England’,1),
(’PL’, 'Poland’,1),
(’G’,’Germany’,1),
(’CDN’,’Canada’,2),
(’USA’,’USA’,2)

Tymczasem pojawia się błąd:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ’,’.

Błędu nie widzę, albo jestem ślepy ale przepisanie polecenia na pojedyncze INSERT pomogło.

Idziemy dalej. Deklaruje sobie zmienną i od razu ją inicjuję:

DECLARE @CSV VARCHAR(1000) = ”;

Znowu bład:

Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable. Czytaj dalej »
By Rafał Kraik in Błedy, SQL

Jak W SQL utworzyć z rekordów listę rodzielaną przecinkami CSV? Wykorzystanie typu tablicowego

2011-09-16

Załóżmy, że pracujemy z tabelą zawierającą jakieś symbole, które mają np zostać załadowane do kontrolki typu listbox, tak by użytkownik mógł wybrać jeną z pozycji za pomocą myszki. Często tego rodzaju czynność wiąże się z przekształceniem listy rekordów w jedną zmienną zawierającą wypisane symbole porozdzielane za pomocą przecinka, średnika lub innego znaku w notacji popularnie zwanej CSV (Comma Separated Values).

Niech naszą tabelą będzie:

CREATE TABLE Countries
(Symbol VARCHAR(3),
Name VARCHAR(30),
GroupId INT);

Wstawiamy do niej rekordy państw:

INSERT Countries VALUES
(’EN’, 'England’,1),
(’PL’, 'Poland’,1),
(’G’,’Germany’,1),
(’CDN’,’Canada’,2),
(’USA’,’USA’,2)

Opisane zadanie możesz zrealizować następującym zapytaniem: Czytaj dalej »

By Rafał Kraik in SQL