Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a szakasz az SQL Serverhez készült .NET-keretrendszer adatszolgáltatójának (SqlClient) ismert problémáit ismerteti.
Sztringfüggvények záró szóközei
Az SQL Server figyelmen kívül hagyja a sztringértékek záró szóközeit. Ezért a sztring végén található szóközök átadása kiszámíthatatlan eredményekhez, akár hibákhoz is vezethet.
Ha záró szóközökre van szüksége a sztringben, fontolja meg egy üres szóköz karakter hozzáfűzését a végén, hogy az SQL Server ne vágja le a sztringet. Ha a záró szóközökre nincs szükség, meg kell vágni őket, mielőtt átadnák őket a lekérdezési csővezetéknek.
RIGHT függvény
Ha egy nem-null értéket ad át első argumentumként, és a 0 értéket második argumentumként adja át RIGHT(nvarchar(max)-nek, 0)-nek vagy RIGHT(varchar(max), 0)-nek, egy NULL értéket ad vissza empty sztring helyett.
CROSS és OUTER APPLY operátorok
AZ SQL Server 2005-ben bevezettük a CROSS és az OUTER APPLY operátorokat. Bizonyos esetekben a lekérdezési csatorna egy Transact-SQL utasítást hozhat létre, amely CROSS APPLY és/vagy OUTER APPLY operátorokat tartalmaz. Mivel egyes háttérszolgáltatók, köztük az SQL Server 2005-nél korábbi SQL Server-verziók nem támogatják ezeket az operátorokat, ezek a lekérdezések nem hajthatók végre ezeken a háttérszolgáltatókon.
Az alábbiakban néhány tipikus forgatókönyvet követünk, amelyek kereszt-APPLY és/vagy OUTER APPLY operátorok jelenlétéhez vezethetnek a kimeneti lekérdezésben:
Korrelált részlekérdezés lapozással.
Egy
AnyElementkorrelált al-lekérdezés felett vagy egy navigáció által létrehozott gyűjtemény felett.OLYAN LINQ-lekérdezések, amelyek elemválasztót elfogadó csoportosítási metódusokat használnak.
Olyan lekérdezés, amelyben explicit módon meg van adva a CROSS APPLY vagy az OUTER APPLY
Olyan lekérdezés, amely DEREF-szerkezettel rendelkezik egy REF-szerkezeten keresztül.
SKIP operátor
Ha SQL Server 2000-et használ, előfordulhat, hogy a SKIP és az ORDER BY nem kulcsos oszlopokon való használata helytelen eredményeket ad vissza. A megadott számú sornál több kihagyható, ha a nem kulcs oszlopban ismétlődő adatok találhatók. Ennek az az oka, hogy a SKIP hogyan lesz lefordítva az SQL Server 2000-hez. A következő lekérdezésben például több mint öt sor kihagyható, ha E.NonKeyColumn ismétlődő értékek vannak:
SELECT [E] FROM Container.EntitySet AS [E] ORDER BY [E].[NonKeyColumn] DESC SKIP 5L
A megfelelő SQL Server-verzió célzása
Az Entity Framework a Transact-SQL lekérdezést célozza meg a tárolási modell (.ssdl) fájl sémaelemének attribútumában ProviderManifestToken megadott SQL Server-verzió alapján. Ez a verzió eltérhet a tényleges SQL Server verziójától, amelyhez csatlakozik. Ha például SQL Server 2005-öt használ, de az ProviderManifestToken attribútum értéke 2008, előfordulhat, hogy a létrehozott Transact-SQL lekérdezés nem fut a kiszolgálón. Az SQL Server 2008-ban bevezetett új dátumidőtípusokat használó lekérdezések például nem lesznek végrehajtva az SQL Server korábbi verzióiban. Ha SQL Server 2005-öt használ, de az ProviderManifestToken attribútum értéke 2000, a létrehozott Transact-SQL lekérdezés kevésbé lesz optimalizálva, vagy kivételt kaphat, amely szerint a lekérdezés nem támogatott. További információt az e témakör korábbi részében található KERESZT és KÜLSŐ ALKALMAZ operátorok című szakaszában talál.
Bizonyos adatbázis-viselkedések az adatbázishoz beállított kompatibilitási szinttől függenek. Ha az ProviderManifestToken attribútum értéke 2005, az SQL Server verziója pedig 2005, de az adatbázis kompatibilitási szintje "80" (SQL Server 2000), a létrehozott Transact-SQL az SQL Server 2005-öt célozza, de a kompatibilitási szint beállítása miatt előfordulhat, hogy nem a várt módon fut. Előfordulhat például, hogy a rendelési adatok elvesznek, ha az ORDER BY listában egy oszlopnév megegyezik a választó oszlopnevével.
Beágyazott lekérdezések a kivetítésben
A vetítési záradékban lévő beágyazott lekérdezések a kiszolgálón található Cartesian-terméklekérdezésekre fordíthatók le. Egyes háttérkiszolgálókon, például az SQL Serveren ez a TempDB-tábla nagy méretűre fordulását okozhatja. Ez csökkentheti a kiszolgáló teljesítményét.
Az alábbi példa egy beágyazott lekérdezésre egy előrejelzési záradékban:
SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c
Kiszolgáló által létrehozott GUID-identitásértékek
Az Entity Framework támogatja a kiszolgáló által létrehozott GUID típusú identitásértékeket, de a szolgáltatónak támogatnia kell a kiszolgáló által létrehozott identitásérték visszaadását egy sor beszúrása után. Az SQL Server 2005-től kezdve a KISZOLGÁLÓ által generált GUID-típust az SQL Server-adatbázisban az OUTPUT záradékon keresztül lehet visszaadni.