A Microsoft egyetlen letölthető fájlként terjeszti a Microsoft SQL Server 2008 javításait. Mivel a javítások egymásra épülnek, minden új kiadás tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző SQL Server 2008-javításban szerepelt.
Tünetek
Vegyük például a következő esetet:
- A Microsoft SQL Server 2008-ban futtatni kell egy olyan lekérdezést, amely az ISNULL() függvényt használja a nullázható oszlopban lévő értékek kiválasztására.
- A nullázható oszlopot tartalmazó táblázat illesztése a nullázható oszlopnál lévő másik táblával történik.
- A Query Optimizer által létrehozott lekérdezésterv kivonat-illesztést, sort vagy rendezési táblát használ a JOIN operátor alatt.
Ebben az esetben a következő hibaüzenet jelenik meg:
Megjegyzés
Msg 681, Level 16, State 3, Line 2
Kísérlet egy nem NULL-képes oszlop értékének NULL értékre állítására.
Ok
A Query Optimizer megállapítja, hogy az ISNULL() függvényben hivatkozott oszlop nem nullázható, mivel az illesztési operátor elutasítja a NULL értékeket. Ezután a lekérdezési tervben a Query Optimizer a JOIN operátor alá helyezi az ISNULL() függvényben található kifejezést. A kifejezés értéke NULL is lehet. A Query Optimizer azonban nem nyeri vissza újra a kifejezés nullázhatósági tulajdonságát. Ezután a lekérdezési tervben egy munkatábla használatával implementálja a kivonat-illesztést, a nyomtatási sort vagy azt a rendezési táblázatot, amely tartalmazza a kifejezést. Emellett a munkatábla megfelelő oszlopa nem nullázhatóként van deklarálva. Amikor az SQL Server lekérdezésmotorja null értékeket próbál beszúrni a munkatáblába, a hiba történik.
Megoldás
A hiba javítását először az SQL Server 2008 Service Pack 1 7. összegző frissítésében adták ki. Az összegző frissítési csomagról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
979065 7-es összegző frissítőcsomag a 2008. SQL Server Service Pack 1-hez Megjegyzés: Mivel a buildek kumulatívak, minden új javításkiadás tartalmazza az előző, SQL Server 2008-as javítás előző kiadásában szereplő összes gyorsjavítást és biztonsági javítást. Javasoljuk, hogy fontolja meg a gyorsjavítást tartalmazó legújabb javítás telepítését. További információ a Microsoft Tudásbázis következő számú cikkében olvasható (a cikk megnyitásához kattintson a sorszámra):
970365 A SQL Server 2008-as szervizcsomag 1 után megjelent SQL Server 2008-as buildek
A Microsoft SQL Server 2008 gyorsjavításai meghatározott SQL Server szervizcsomagokhoz jönnek létre. Az SQL Server 2008 Service Pack 1 telepítéséhez telepítenie kell az SQL Server 2008 Service Pack 1 gyorsjavítását. Alapértelmezés szerint az SQL Server szervizcsomagjában található összes gyorsjavítás megtalálható a következő SQL Server szervizcsomagban.
Kerülő megoldás
A problémát az alábbi módszerek egyikével kerülheti meg.
1. módszer:
Távolítsa el az ISNULL() függvényt a lekérdezésből.
Megjegyzés: Mivel a függvényben található oszlop a JOIN operátorból származik, amely elutasítja a NULL értékeket, az ISNULL() függvény redundáns.
2. módszer:
Írja át a lekérdezést úgy, hogy a lekérdezési terv ne használjon kivonatillesztést, várólistát vagy rendezési táblát. Ha például a lekérdezés tartalmaz ORDER BY záradékot, hozzon létre egy csoportosított vagy lefedő indexet, amely biztosítja a szükséges rendezést és az összes szükséges oszlopot tartalmazza. E módszer használatakor a Query Optimizer nem használ rendezési táblázatot.
Állapot
A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.
Hivatkozások
Az SQL Server növekményes karbantartási modelljéről a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
935897 A SQL Server csapatától elérhető egy növekményes karbantartási modell a jelentett problémák gyorsjavításához
Az SQL Server frissítéseihez szükséges elnevezési sémáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
822499 Új elnevezési séma a Microsoft SQL Server szoftverfrissítési csomagjaihoz
A szoftverfrissítésekkel kapcsolatos terminológiáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
824684 A Microsoft szoftverfrissítéseinek leírására használt szabványos terminológia leírása