Autor Téma: Omezení a nekompatibility MSSQL  (Přečteno 2951 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1281
  • Karma: 28
    • Pepak.net
Omezení a nekompatibility MSSQL
« kdy: 23-03-2015, 19:24:14 »
V souvislosti s nedávným příspěvkem se nemohu než začít divit: Co to proboha s MSSQL je, že má tolik na první pohled absurdních omezení? Chápu, když databáze něco vůbec neumí, ale MSSQL umí skoro všechno, akorát to v různých specifických situacích má omezení, nad kterými zůstává rozum stát. Vedle problému "nelze použít podmínku (pole = :parametr) na řetězcová pole, buď se musí použít LIKE nebo konverze" popisovaného vedle jsem teď nedávno narazil na to, že dotaz s WITH potřebuje začínat středníkem, jinak nefunguje z klientských stanic (ale přímo ze serveru ano) a nejspíš bych někde v mailu dokázal dohledat další, které už jsem zapomněl. Jako WTF??

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Omezení a nekompatibility MSSQL
« Odpověď #1 kdy: 23-03-2015, 22:53:04 »
V souvislosti s nedávným příspěvkem se nemohu než začít divit: Co to proboha s MSSQL je, že má tolik na první pohled absurdních omezení? Chápu, když databáze něco vůbec neumí, ale MSSQL umí skoro všechno, akorát to v různých specifických situacích má omezení, nad kterými zůstává rozum stát. Vedle problému "nelze použít podmínku (pole = :parametr) na řetězcová pole, buď se musí použít LIKE nebo konverze" popisovaného vedle jsem teď nedávno narazil na to, že dotaz s WITH potřebuje začínat středníkem, jinak nefunguje z klientských stanic (ale přímo ze serveru ano) a nejspíš bych někde v mailu dokázal dohledat další, které už jsem zapomněl. Jako WTF??

ta podmínka na rovnost myslím nešla s image a text, ale s (n)varchar to snad fungovalo. Varchar byl dřív omezený délkou (asi 32 nebo 64K znaků), s varchar(max) už by to ale neměl být praktický problém (tam bude limit tak 2 nebo 4G). To s tím WITH je nějaká blbost, to bych viděl spíš jako problém toho, z čeho tam ty dotazy posíláš nebo tam chodí něco jiného, než si myslíš. Podívej se třeba profilerem, co tam opravdu leze.

Jinak každá db má nějaká omezení a featury na odstřel, u Oracle jsme se taky nestačili divit.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1281
  • Karma: 28
    • Pepak.net
Re:Omezení a nekompatibility MSSQL
« Odpověď #2 kdy: 24-03-2015, 05:08:57 »
To s tím WITH je nějaká blbost, to bych viděl spíš jako problém toho, z čeho tam ty dotazy posíláš nebo tam chodí něco jiného, než si myslíš. Podívej se třeba profilerem, co tam opravdu leze.
No, blbost určitě, ale ne moje :-)
http://dba.stackexchange.com/questions/23371/why-should-a-cte-start-with-a-semi-colon
a spousta dalších.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1771
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Re:Omezení a nekompatibility MSSQL
« Odpověď #3 kdy: 24-03-2015, 07:21:56 »
ta podmínka na rovnost myslím nešla s image a text, ale s (n)varchar to snad fungovalo. Varchar byl dřív omezený délkou (asi 32 nebo 64K znaků), s varchar(max) už by to ale neměl být praktický problém (tam bude limit tak 2 nebo 4G). To s tím WITH je nějaká blbost, to bych viděl spíš jako problém toho, z čeho tam ty dotazy posíláš nebo tam chodí něco jiného, než si myslíš. Podívej se třeba profilerem, co tam opravdu leze.
MSSQL jsem s Delphi moc nepouzival, ale obecne s nim mam stejnou zkusenost jako Mi.Chal. Zadny strednik pred with jsem nikdy nepotreboval (protoze radne ukoncuju prikazy) a kdyz se mi vyskytne neco na prvni pohled nepochopitelneho, zapinam profiler.

To jsou tam jine "speky", ktere nezachyti uz SQL parser a nefunguje to, jak by si clovek predstavoval.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Omezení a nekompatibility MSSQL
« Odpověď #4 kdy: 24-03-2015, 09:24:18 »
No, blbost určitě, ale ne moje :-)
http://dba.stackexchange.com/questions/23371/why-should-a-cte-start-with-a-semi-colon
a spousta dalších.

No však tam píšou, že to je potřeba pokud před with byl nějaký jiný příkaz (a pokud je to na začátku, tak to snad potřeba není). Podíval ses, co do db opravdu leze?

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1281
  • Karma: 28
    • Pepak.net
Re:Omezení a nekompatibility MSSQL
« Odpověď #5 kdy: 24-03-2015, 09:49:42 »
No však tam píšou, že to je potřeba pokud před with byl nějaký jiný příkaz (a pokud je to na začátku, tak to snad potřeba není).
Bohužel je.

Citace
Podíval ses, co do db opravdu leze?
Ne. To přece není řešení. Sice třeba zjistím, že konkrétně v této situaci si ADO ovladač na začátek příkazu přidal svůj vlastní neukončený příkaz, ale neříká mi to nic o tom, za jakých jiných situací mi ještě může ADO do příkazů kecat. Co já vím, třeba to další příkazy bude dávat v pátek třináctého mezi 13. a 14. hodinou, pokud je cílovou databází MSSQL 2012, na klientovi běží Windows 7 bez aktualizace KB1234567 a uptime je delší než 3 týdny. Pokud do DB leze něco jiného, než jsem si vyžádal, beru to jako další "omezení a nekompatibilitu MSSQL" a řeším to jen do té míry, abych byl schopen příkaz spolehlivě použít (čili v tomto případě středník na začátku příkazu).

Nebo "omezení a nekompatibilita Delphi", to je další možnost, ale v tomto případě si na to chování stěžují i neDelphisti.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Omezení a nekompatibility MSSQL
« Odpověď #6 kdy: 24-03-2015, 13:13:42 »
Citace
Podíval ses, co do db opravdu leze?
Ne. To přece není řešení. Sice třeba zjistím, že konkrétně v této situaci si ADO ovladač na začátek příkazu přidal svůj vlastní neukončený příkaz, ale neříká mi to nic o tom, za jakých jiných situací mi ještě může ADO do příkazů kecat.

Myslel jsem jestli tam třeba nemáte chybu v té vaší aplikaci :-) a nedělá to třeba samo něco navíc. Fakt mě teď nenapadá, proč by tam měl ovladač sám něco cpát. Kdyby ses podíval profilerem, tak bys věděl hned, čím to je. Ale pokud ti jako řešení stačí, že tam přidáš středník a pouští se něco, ani nevíš co a nezajímá tě to, tak je to taky způsob řešení.

Offline oxo

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Omezení a nekompatibility MSSQL
« Odpověď #7 kdy: 24-03-2015, 19:27:02 »
Jestli toto téma chápu správně, že je s trochou nadsázky, tak mě onehdá pobavilo zase toto: http://www.hovnokod.cz/763 :D

Za sebe nemůžu na žádnou zmíněnou DB házet špínu, nepřišel jsem s nimi do křížku.
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 567
  • Karma: 23
Re:Omezení a nekompatibility MSSQL
« Odpověď #8 kdy: 24-03-2015, 22:47:25 »
Jestli toto téma chápu správně, že je s trochou nadsázky, tak mě onehdá pobavilo zase toto: http://www.hovnokod.cz/763 :D

Za sebe nemůžu na žádnou zmíněnou DB házet špínu, nepřišel jsem s nimi do křížku.

To je skoro tak dobrý jako oprava traktoru - https://www.youtube.com/watch?v=SiUz_akTmcY. Někdo z toho část vybral do http://milujipraci.cz/ :-)

Offline oxo

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 40
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Omezení a nekompatibility MSSQL
« Odpověď #9 kdy: 25-03-2015, 08:32:09 »
Nn, Lakatoš je nejvíc!  ;D
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: