Skip Navigation Links.
Skip Navigation Links.

.net student

microsoft

Vyhledávání v obsahu portálu


Přihlášení uživatele

Přihlášení uživatele

Členové:
  • Poslední nový uživatel Poslední: liborsky
  • Nový dnes Dnes nových 1
  • Nový včera Včera nových: 0
  • Počet uživatelů: Celkem: 4708
Lidé online:
  • Návštěvníci: Návštěvníků: 24
  • Registrovaných Členů: 0
  • Celkem Celkem: 24
Mapa Stranek

Novinky v SQL Server 2008 z pohledu programátora

V tomto článku bych se rád rozepsal o nových prvcích implementovaných do Microsoft SQL Server 2008, který bude zanedlouho uvolněn ve finální verzi. Zaměříme se na ty novinky, které se týkají převážně nás - programátorů.

Když jsem se rozhodl prozkoumat, co je v SQL Serveru nového, domníval jsem se, že nebudu mít moc práce. Myslel jsem si, že novinek je poskrovnu a že verze 2008 je spíše marketingovým trikem, ale jak jsem se mýlil!

První novinkou, které si jako programátoři všimneme, pokud budeme pracovat s SQL Management Studiem, je podpora IntelliSense. Ta mně osobně přijde ještě nedoladěná, ale tak třeba s prvním service packem… J Tak jako tak, je to velmi šikovná věcička, která dělá náš život zase o trošku jednodušší.

Vkládání více dat najednou

Konečně! Jedině tak lze přivítat tuto novinku, dlouho v MS SQL chybějící. Konečně lze v jenom INSERT statementu vložit najednou do tabulky více řádků. Ač se to může zdát jako banalita, já mám z této funkcionality velikou radost.

Syntaxe není nijak překvapující:

INSERT INTO MojeTabulka(Id, Popis)
VALUES
(1, ‚První radek‘),
(2, ‚Druhy radek‘)

„Table-valued“ parametry

SQL  Server 2008 nyní umožňuje nadefinovat si složené datové typy – tabulky – které je možné potom předávat jako parametry funkcím a procedurám. Je tedy možné redukovat počet vstupních parametrů funkce a předat vše v této tabulce. Pro Table-valued parametry jsou podporovány i primární klíče a indexace.

CREATE TYPE MujTyp AS TABLE
(
Id INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,
NazevProduktu NVARCHAR(MAX) NOT NULL,
PopisProduktu NVARCHAR(MAX) NULL
)

Pojďme se nyní podívat na nové datové typy.

Date & time

Vývojový tým SQL Serveru se zaměřil na zjednodušení a zefektivnění práce s časovými údaji a proto představil několik nových časových data typů. Těmi jsou:

  1. Time

    Slouží pouze k uložení času a to s přesností na 100 nanosekund.

  2. Date

    Ukládá libovolné datum (bez údaje o čase).

  3. Datetime2

    Datetime2 je podobný jako starý známý datetime, avšak má mnohem větší přesnost – 100 nanosekund.
  4. Datetimeoffset

    Stejný typ jako datetime2, ale navíc přidává časové zóny (v rozmezí +- 14 hodin).

 

 Pro přehled uvádím tabulku srovnávající rozsahy a paměťovou náročnost jednotlivých typů:

Data type

Format

Range

Accuracy

Storage size (bytes)

time

hh:mm:ss[.nnnnnnn]

00:00:00.0000000 through 23:59:59.9999999

100 ns

3 to 5

date

YYYY-MM-DD

00001-01-01 through 9999-12-31

1 day

3

smalldatetime

YYYY-MM-DD hh:mm:ss

1900-01-01 through 2079-06-06

1 minute

4

datetime

YYYY-MM-DD hh:mm:ss[.nnn]

1753-01-01 through 9999-12-31

0.333 second

8

datetime2

YYYY-MM-DD hh:mm:ss[.nnnnnnn]

0001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999

100 ns

6 to 8

datetimeoffset

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm

00001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999 (in UTC)

100 ns

8 to 10

 

Filestream

Filestream je nová funkcionalita SQL serveru, která umožňuje skladovat libovolná binární data (obrázky, videosoubory, spreadsheety) na lokálním NTFS disku na místo v databázi, jak tomu bylo doposud. „Z vnějšku“ se pro uživatele, který k datům přistupuje, nic nemění, záleží pouze na deklaraci daného varbinary sloupce v tabulce. Pokud chceme Filestream používat, musí naše databáze obsahovat speciální druhotný Filegroup nastavený na použití filestreamu. Tento filegroup ukazuje na místo na disku, kam jsou binární data ukládána. Další potřebnou věcí v tabulce, která tato binární data obsahuje je Guid identifikátor řádku.

Přístupová práva pro data se řídí dle standardního nastavení přístupu ke sloupci a fyzická data mají přístup omezen pouze na uživatele, pod kterým SQL Server běží. Soubory na disku jsou uzamčeny, pokud je příslušná databáze používána.

Hlavní výhodou tohoto přístupu ke skladování binárních dat je vyšší rychlost přístupu k datům (platí pro soubory průměrně větší než 2 MB) a také možnost diskovou oblast s těmito daty sdílet v síti.

Pro použití Filestream je potřeba server nastavit (sp_filestream_configure) a standardně je Filestream vypnut.

 

--sp_filestream_configure [ [ @enable_level = ] level ] [ [ , @share_name = ] 'share_name' ]

-- 0 - Disabled. This is the default value

-- 1 -  Enabled only for Transact-SQL access

-- 2 -  Enabled only for Transact-SQL and local file system access.

-- 3 -  Enabled for Transact-SQL, local file system access, and remote file system access.

sp_filestream_configure @enable_level = 3, @share_name = "MyFileStreamShare";

GO

 

--vytvořme  databázi se sekundárním filegroupem

CREATE DATABASE FileStreamDB ON PRIMARY

  ( NAME = FileStreamDB_data,

    FILENAME = N'C:\workshop\FileStreamDB_data.mdf',

    SIZE = 10MB,

    MAXSIZE = 50MB,

    FILEGROWTH = 10%),

FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM

  ( NAME = FileStreamDB_files,

    FILENAME = N'C:\workshop\DBFiles');

GO

 

USE FileStreamDB

GO

 

--vytvořme tabulku

CREATE TABLE [Data]

                (

                               Id UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL PRIMARY KEY,

                               FileName nvarchar(MAX) NOT NULL,

                               [File] varbinary(MAX) FILESTREAM

                )

GO

 

--vložme data

INSERT INTO [Data] (Id, FileName, [File])

VALUES

                (

                               NEWID(),

                               'hello.txt',

                               Cast ('Hello world!' As varbinary(max)) –-nějaká binární data

                )

GO

 

SELECT * FROM [Data]

HierarchyID

Odpovědí na zoufalá volání mnohých programátorů je nový datový typ HierarchyID, který umožňuje ukládat do SQL databáze hierarchická data a provádět nad nimi příslušné operace. Typ je implementovaný jako „User defined type“ (díky integraci s .NET - CLR) tudíž kromě samotné id hodnoty má také metody, pomocí kterých se s tímto typem pracuje.

Metody HierarchyID:

·         GetAncestor

·         GetDescendant

·         GetLevel

·         GetRoot

·         IsDescendant

·         Parse

·         Read

·         Reparent

·         ToString

·         Write

Samotné hierarchické id je uživateli prezentováno jako řetězec ve tvaru /a/b/c.d/… Kde a, b, c, d jsou libovolná čísla, lomítka představují oddělení jednotlivých levelů struktury a tečka je vložena za případu, že přidáváme data do již existující struktury na specifické místo (např. před existující položku).

Pojďme se nyní podívat, jak práce s tímto typem probíhá:

-- Chceme vytvořit následující strukturu:
--   CEO
--             L__ Technical director
--                                            L__ Chief software architekt
--                                            L__Chief system administrator
--                L__ Financial director

--vytvoříme si tabulku
CREATE TABLE People
(
                Id int IDENTITY(1, 1) NOT NULL PRIMARY KEY,
                Position nvarchar(MAX) NOT NULL,
                FunctionHierarchy hierarchyid NULL
)
GO

--získáme root hierarchie

DECLARE @root hierarchyid
SELECT @root =  hierarchyid::GetRoot() FROM People

--vlož CEO

INSERT INTO People (Position, FunctionHierarchy)
VALUES
('CEO', @root)

-- Chief system administrator

INSERT INTO People (Position, FunctionHierarchy)
VALUES
(' Chief system administrator ', @root.GetDescendant(NULL, NULL))


--vyber Chief system administrator
DECLARE @td hierarchyid
SELECT @td = CAST('/1/1/' AS hierarchyid)

-- vlož Chief software architekt
INSERT INTO People (Position, FunctionHierarchy)
VALUES
('Chief software architekt ', @td.GetDescendant(NULL, NULL))

--vlož Chief software architekt, chceme, aby v naší hierarchii byl před Chief system administrator  - tj. na pozici /1/1/1.1/
INSERT INTO People (Position, FunctionHierarchy)
VALUES
(' Chief software architekt', @td.GetDescendant( NULL ,  CAST('/1/1/1/' AS hierarchyid)))

-- Financial director
INSERT INTO People (Position, FunctionHierarchy)
VALUES
(' Financial director ', @root.GetDescendant( CAST('/1/' AS hierarchyid) , NULL))


--vyber všechny funkce podřazené Technical directorovi
SELECT * FROM People WHERE hierarchyid::isDescendant(@td) = 1

 

 Prostorová data 

Velmi propagovanou novinkou nového SQL Serveru jsou takzvané prostorové (spatial) datové typy. Ty nám umožňují v databázi uchovávat údaje o prostorových dispozicích. Prostorové datové typy je možné rozdělit do dvou podskupin, a sice:

  1. Geometrické

    Umožňuje skladovat geometrické objekty, jednotlivé vrcholy polygonů atd. Tyto typy bychom mohli využít například k uložení informací o silnicích v aplikaci, která se stará o gps navigaci.

  2. Geografické

    Uchovává geografická data jako například mapové pozice. Nad daty lze poté klást dotazy ve stylu „vrať mi všechny řádky/objekty/… které mají od toho a toho místa vzdálenost x“ atd.

 

Stejně tak jako výše popsané HierarchyId jsou prostorová data implementována jako user-defined types s hodnotami a funkcemi, které s daty manipulují.


 

Ondřej Šťastný
Developer, Microsoft Student Partner
ondrej.stastny@memos.cz

Ondřej Šťastný :: 2. dubna 2008 :: 1073 shlédnutí :: 2 komentářů
kategorie: Microsoft - produkty

Comments

By Jiri Cincura @ 3. dubna 2008 0:59
Nejak si opomnel prostorova data...

BTW SQL Server byl oficialne predstaven, ale finalni verze jeste neni dostupna, perex muze byt pro nekoho matouci. :)
By Ondřej Šťastný @ 3. dubna 2008 16:28
Ahoj, díky za připomínky. Perex jsem poupravil a stejně tak jsem doplnil něco málo o spatial datech. Na ty jsem zapomněl čistě z toho důvodu, že sem měl článek rozepsaný již před časem a teď když jsem se k němu vrátil, tak jsem o tom už moc nepřemýšlel :)
Musíte být přihlášen pro posílání komentářů. Přihlásit se můžete zde
Přehled posledních diskuzí

Přehled posledních diskuzí

  1. ASP.NET programátor zlín [12.16.2008 10:17 odp.]
    Dobrý den,v současné době hledáme programátora na pozici: ASP.NET / C# programátor - Zlín Požadavky: schopnost sam...
  2. RE: MS Fest video [12.08.2008 6:20 odp.]
    AhojVideo záznam bude, po večerech pilně pracujeme na jeho stříhání. Po dokončení se zde určitě vyskytne link na stažení...
  3. MS Fest video [12.04.2008 4:18 odp.]
    Existuje videozáznam z MS Festu konaneho (koncem listopadu 2008) o vikendu na Male Strane na fakulty MFF? Je nekde mozne...
  4. Práce pro programátora [11.25.2008 10:12 dop.]
    Hledám nadšeného programátora na vytvoření webstránek online tv/stream video. V případě zájmu pište na email: projekt@tr...
Novinky z klubů

Novinky z klubů

  1. Programátorské večery: F# 15. prosince 2008
    Ve čtvrtek 18.12.2008 se v rámci programátorských večerů uskuteční přednáška n...
  2. Programátorské večery: VSTO 10. prosince 2008
    Nad kancelářským balíkem MS Office se dají tvořit rozsáhlé aplikace. Od jednod...
  3. Programátorské večery: .NET 4.0 3. prosince 2008
    Zajímá Vás, na co se můžete těšit v nové verzi .NETu? Pak se přijďte podívat n...
  4. Záznamy z programátorských večerů 3. prosince 2008
    Záznamy z prog. večerů (prezentace+dema, občas i nějaké to video) můžete dočasně najít na http://ci...
Co se píše jinde

Co se píše jinde

Windows 7 Beta k dispozici pro MSDN předplatitele

Windows 7 Beta k dispozici pro MSDN předplatitele

Silverlight 2 úvod

Zajímá vás psaní webových aplikací na straně klienta ve vašem oblíbeném nástroji v .NETu? Slyšeli jste o Silverlightu...

PF 2009

Co tak popřát čtenářům programátorského blogu do nového roku? Snad abyste dostávali rozumná zadání a nemuseli tenkou ...

TypeConvertery

V tomto díle si vysvětlíme, co jsou TypeConvertery a k čemu se používají. To si také ukážeme na příkladu.

Atributy jmenného prostoru System.ComponentModel

V tomto článku si ukážeme jak efektivně využívat atributy z jmenného prostoru System.ComponentModel při vytváření vla...