Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

[PL] Nowe typy danych w SQL Server 2008 na MTS 2008 – Q&A

Jedną z sesji na MTS 2008, na której udało mi się być, była sesja Krzysztofa Kozielczyka (MS) poświęcona nowym typom danych w SQL Server 2008. W czasie tej sesji zadałem parę pytań, na które Krzysztof odpowiedział lepiej lub gorzej. Postanowiłem je tu przytoczyć, by kiedyś do nich wrócić, choćby po to, by sprawdzić, czy MS / Krzysztof dotrzymuje słowa :-)

---

Pytanie: Dlaczego nie można przeprowadzać operacji dodawania (odejmowania) z udziałem nowych typów daty (datetime2, date, datetimeoffset) i liczb integer? Jest to przecież niekonsekwencja i brak spójności z typami danych z poprzednich wersji SQL Servera (datetime oraz smalldatetime). Np.

-- to działa
SELECT GETDATE() + 1

-- Msg 206, Level 16, State 2, Line 1
-- Operand type clash: datetime2 is incompatible with int
SELECT SYSDATETIME() + 1

Odpowiedź: … ? :-)

Komentarz: Tak, to faktycznie trudno wytłumaczyć :-) Nie upieram się, by to działało, ale skoro już nie da się takiej możliwości zabrać (?) starym typom daty i czasu (to oczywiste, że taki krok spotkałby się z dużą dezaprobatą użytkowników, zwłaszcza tych, którym nagle przestałby działać kod T-SQL), może należało się zastanowić nad taką możliwością?

---

Pytanie: Dlaczego format binarny, w jakim są przechowywane typy geometry i geography jest innym formatem niż format Well-Known Binary, którego można użyć do reprezentacji danych tych typów? Np.

DECLARE @g geometry = 'POINT(1 1)'
SELECT @g.STAsBinary() AS WKB, @g AS StoredBinary
-- Wynik:
-- WKB                                          StoredBinary
-- -------------------------------------------- ----------------------------------------------
-- 0x0101000000000000000000F03F000000000000F03F 0x00000000010C000000000000F03F000000000000F03F

Odpowiedź: MS dąży do ujednolicenia…

Komentarz: Future release? ;-) A tak serio – ja nie oczekuję, by zawsze był używany ten sam format (co jednak byłoby logiczne). Za to fajnie by było się dowiedzieć, czemu jest tak, a nie inaczej.

---

Pytanie: Dlaczego parametry typów tablicowych w procedurach składowanych (o funkcje nie pytam, choć mnie korci) muszą być READONLY? Np.

USE tempdb
GO

CREATE TYPE dbo.MojaTabelka
AS
TABLE (MojaKolumna int)
GO

-- Msg 352, Level 15, State 1, Procedure MojaProcedura, Line 2
-- The table-valued parameter "@Tabelka" must be declared with the READONLY option.
CREATE PROC dbo.MojaProcedura
@Tabelka dbo.MojaTabelka
AS
SELECT * FROM @Tabelka
GO

Odpowiedź: Pracujemy nad tym, by nie były…

Komentarz: I dobrze, że MS nad tym pracuje, bo co to za frajda móc przekazać tabelkę do procedury, jeśli nie można tej tabelki zmodyfikować w kodzie procedury bez przepisania danych do nowej struktury (tabelki @ lub # – użycie którejkolwiek powoduje, że zmiana w schemacie przekazywanej tabeli niesie za sobą potrzebę dokonania zmian w kodzie procedury)?

---

Te i inne pytania pojawiły się, gdy robiłem mały research na potrzeby książki pt. Serwer SQL 2008. Administracja i programowanie, która już niebawem będzie w księgarniach (wydawnictwo Helion zapowiedziało jej wydanie w grudniu br.).

Żeby nie było wątpliwości – wspomniana sesja Krzysztofa mi się podobała. Podał wiele szczegółów implementacji nowych typów danych, które na pewno dają większe możliwości programistom T-SQL (a po części także programistom .NET) pracującym z SQL Server 2008.

A może robiłeś doświadczenia z nowymi typami danych w SQL Server 2008 i masz jakieś ciekawe spostrzeżenia? Chętnie je poznam (pisz w komentarzu lub mailu)!

EDIT: Po spotkaniu zadałem Krzysztofowi jeszcze jedno pytanie, które dotyczyło pewnego wątku na Connect: https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=365876. Rzecz rozbija się o deadlock, który pojawia się, gdy w pojedynczej transakcji próbujemy utworzyć własny typ danych i funkcję odpowiednio wykorzystującą ten typ. Krzysztof obiecał wrzucić ten temat na listę najpilniejszych spraw w jego zespole ;-) No, zobaczymy, czy to coś pomoże.

Opublikowane 16 października 2008 07:48 przez brejk

Komentarze:

# re: [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 – Q&A

16 października 2008 12:20 by damian_widera

Brawo, brawo :)

Z tym typem datetime2 to rzeczywiście katastrofa, skoro takich operacji robić się nie da.

A jeśli chodzi o typy tablicowe, ciekawi mnie dlaczego ten ReadOnly tam jest. Ciekawe, co kierowało tworcami?

# re: [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 – Q&A

17 października 2008 15:48 by Tomasz Niewolik

Myślę, że prawdziwym powodem wprowadzenia typów tablicowych była potrzeba ich posiadania (bo konkurencja już je ma), a nie przemyślane działanie. W kilku miejscach Krzysztof Kozielczyk przyznał się do tego wprost.

P.S. Mi prezentacja też się podobała.

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 – c.d.

4 listopada 2008 07:52 by SQLGEEK

Niedawno pisałem o pytaniach, jakie padły w czasie sesji Krzysztofa Kozielczyka (Program Manager z MS,

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

# [PL] Nowe typy danych w SQL Server 2008 na MTS 2008 ??? c.d. | Optymalizacja strony www

Komentarze anonimowe wyłączone

About brejk

MVP, MCT, SQL Server geek