Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Questa sezione descrive i problemi noti relativi al provider di dati .NET Framework per SQL Server (SqlClient).
Spazi finali nelle funzioni di stringa
SQL Server ignora gli spazi finali nei valori stringa. Pertanto, il trasferimento di spazi finali nella stringa può causare risultati imprevedibili, fino a malfunzionamenti.
Se è necessario disporre di spazi finali nella stringa, è consigliabile aggiungere un carattere di spazio alla fine, affinché SQL Server non la tagli automaticamente. Se gli spazi finali non sono necessari, devono essere tagliati prima che vengano passati alla pipeline di query.
Funzione RIGHT
Se viene passato un valore diverso da null come primo argomento e 0 come secondo argomento a RIGHT(nvarchar(max), 0) o RIGHT(varchar(max), 0), verrà restituito un valore NULL anziché una stringa empty.
Operatori CROSS ed OUTER APPLY
Gli operatori CROSS ed OUTER APPLY sono stati introdotti in SQL Server 2005. In alcuni casi la pipeline di query potrebbe produrre un'istruzione Transact-SQL che contiene operatori CROSS APPLY e/o OUTER APPLY. Poiché alcuni provider back-end, incluse le versioni di SQL Server precedenti a SQL Server 2005, non supportano questi operatori, tali query non possono essere eseguite su questi provider back-end.
Di seguito sono riportati alcuni scenari tipici che potrebbero portare alla presenza di operatori CROSS APPLY e/o OUTER APPLY nella query di output.
Sottoquery correlata alla paginazione.
Un'operazione
AnyElementsu una sottoquery correlata o su una raccolta prodotta dalla navigazione.Query LINQ che usano metodi di raggruppamento che accettano un selettore di elementi.
Una query in cui è specificato in modo esplicito un CROSS APPLY o un OUTER APPLY
Una query con un costrutto DEREF su un costrutto REF.
Operatore SKIP
Se si usa SQL Server 2000, l'uso di SKIP con ORDER BY in colonne non chiave potrebbe restituire risultati non corretti. È possibile ignorare più del numero specificato di righe se la colonna non chiave contiene dati duplicati. Questo è dovuto al modo in cui SKIP viene convertito per SQL Server 2000. Nella query seguente, ad esempio, potrebbero essere ignorate più di cinque righe se E.NonKeyColumn sono presenti valori duplicati:
SELECT [E] FROM Container.EntitySet AS [E] ORDER BY [E].[NonKeyColumn] DESC SKIP 5L
Individuazione della versione corretta di SQL Server
Entity Framework mira alla query Transact-SQL in base alla versione di SQL Server specificata nell'attributo ProviderManifestToken dell'elemento Schema nel file del modello di archiviazione (.ssdl). Questa versione potrebbe essere diversa dalla versione di SQL Server effettiva a cui si è connessi. Ad esempio, se si usa SQL Server 2005, ma l'attributo ProviderManifestToken è impostato su 2008, la query Transact-SQL generata potrebbe non essere eseguita nel server. Ad esempio, una query che usa i nuovi tipi di data e ora introdotti in SQL Server 2008 non verrà eseguita nelle versioni precedenti di SQL Server. Se si usa SQL Server 2005, ma l'attributo ProviderManifestToken è impostato su 2000, la query Transact-SQL generata potrebbe essere meno ottimizzata oppure si potrebbe ottenere un'eccezione che indica che la query non è supportata. Per altre informazioni, vedere la sezione Operatori CROSS ed OUTER APPLY, più indietro in questo argomento.
Alcuni comportamenti del database dipendono dal livello di compatibilità impostato sul database. Se l'attributo ProviderManifestToken è impostato su 2005 e la versione di SQL Server è 2005, ma il livello di compatibilità di un database è impostato su "80" (SQL Server 2000), il Transact-SQL generato sarà destinato a SQL Server 2005, ma potrebbe non essere eseguito come previsto a causa dell'impostazione del livello di compatibilità. Ad esempio, è possibile perdere informazioni sull'ordinamento se un nome di colonna nell'elenco ORDER BY corrisponde a un nome di colonna nel selettore.
Query annidate nella proiezione
Le query annidate in una clausola di proiezione potrebbero essere convertite in query di prodotto cartesiane nel server. In alcuni server back-end, incluso SQL Server, la tabella TempDB può diventare piuttosto grande. Ciò può ridurre le prestazioni del server.
Di seguito è fornito un esempio di un subquery all'interno di una clausola di proiezione.
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
Valori Identity GUID generati dal server
Entity Framework supporta i valori identity dei tipi GUID generati dal server, ma il provider deve supportare la restituzione del valore identity generato dal server dopo l'inserimento di una riga. A partire da SQL Server 2005, è possibile restituire il tipo GUID generato dal server in un database di SQL Server tramite la clausola OUTPUT.