IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Václav Dvořáček:21.3.2018 22:02

Ahoj všem
předem upozorňuji že jsem v SQL laik :-)

K mému problému:
Na jednom PC mám program (poměrně starý 2005) pro skladovou databázi a načítání probíhá přes SQLServer. V tomto PC jsem provedl přes SSM Studio zálohu databáze *.bak
Na druhém PC instalace SQLServeru Express 2012 a SSM Studia, obnovení databáze z *.bak souboru a instalace zmiňovaného programu na skladovou databázi.
Bohužel program i když se spustí, tak při požadavku na výpis hází chybu. můžu event dodat screen

Začal jsem se tedy databází prodírat v SSM a zjistil jsem, že pokud chci zobrazit edit Top 200 Rows u určitého dotazu vyskočí na mě Error
Error Source: .NetSqlClient Data Provider
Error Message: "FASTFIRSTROW" is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANCETABLE function, ensure that your database compatibility mode is set to 90.
Incorrect syntax near the keyword 'AND'.
Could not use view or function 'název_dotazu' because or binding errors.

ve vlastnostech databáze je kompatibilita nastavena na SQL Server 2005 (90)

Jelikož se na Design zmiňovaného dotazu dostanu v pohodě, přikládám SQL kód:

SELECT        OSEDOR200900001.KlicDokla AS Doklad, OSEDOR200900001.CISLORADK AS RadeDokla, OSEDOR200900001.UcetniMes, OSEDOR200900001.Polozka, OSEDOR200900001.MnoZaklaJ AS MnozstviZ,
                         SUBSTRING(OSEDOR200900001.KlicDokla, 17, 2) AS Modul
FROM            dbo.OSEDOR200900001 AS OSEDOR200900001 INNER JOIN
                         dbo.OCIPOH200900001 AS B00 WITH (FASTFIRSTROW NOLOCK) ON OSEDOR200900001.Polozka = B00.SKLPOLOZK
WHERE        (OSEDOR200900001.TypRadku = 'P') AND (SUBSTRING(OSEDOR200900001.KlicDokla, 17, 2) = 'SE') AND (B00.SkladovaM = 1) AND (NOT EXISTS
                             (SELECT        KlicDokla, CISLORADK, PoradiMis, Trvanlivo, SkladovaM, MnoZaklaJ, CislPruvo, Prijemka, DruhBloka, Polozka, Sklad, SmerPoPM, SmerPohyb, TypRadku
                               FROM            dbo.OSEDOM200900001 AS T0200
                               WHERE        (OSEDOR200900001.KlicDokla = KlicDokla) AND (OSEDOR200900001.CISLORADK = CISLORADK))) AND (OSEDOR200900001.TZprac = 0)

věděl by mi někdo jakkoliv poradit

cokoli dalšího by bylo potřeba tak dodám

Díky moc Václav

 
Odpovědět
21.3.2018 22:02
Avatar
Paul
Člen
Avatar
Odpovídá na Václav Dvořáček
Paul:22.3.2018 12:22

I přesto, že máš databázi přepnutou do potřebného compatibility levelu, s FASTFIRSTROW ti to nebude fungovat. Ve verzi 2012 už tento hint není podporován. Bude potřeba dotaz přepsat za použití OPTION (FAST n ) abys zachoval stejnou logiku.
Více informací případně zde

 
Nahoru Odpovědět
22.3.2018 12:22
Avatar
Václav Dvořáček:22.3.2018 14:35

Mohl bys mi prosím napsat jak by měl řádek

dbo.OCIPOH200900001 AS B00 WITH (FASTFIRSTROW NOLOCK) ON OSEDOR200900001.Polozka = B00.SKLPOLOZK

vypadat s OPTION? Na těchto stránkách už jsem také byl a zkoušel všechno možné, bohužel jazyku SQL toliko nerozumím
díky V.

možná ještě pro zajímavost:
zkoušel jsem v Accessu importovat data z této dtb a ačkoliv jsou dotazy ve stejném formátu (pouze se mění např.OSEDOR200900001 na OSEDOR201800001) pro roky od r.2009 do r.2018 tak v Accessu se mi data z let 2017 a 2018 zobrazí, u starších dojde při importu k chybě.

Editováno 22.3.2018 14:38
 
Nahoru Odpovědět
22.3.2018 14:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.