E' un bel periodo che sto impazzendo con un errore su Sharepoint Services 3 e finalmente si è risolto dopo l'installazione del Service Pack 1.
Vi introduco allo scenario in cui mi trovavo, così magari se capita a qualcuno di voi non dovete star li a cercare dappertutto dove sta l'errore.

Avevo a che fare con una document library (ma l'errore si presenta anche su una lista normale) in cui avevo installato un event handler per la modifica dei permessi sul singolo item. Tale event handler (molto simile a questo per intenderci) andava in errore quando cercavo di rompere l'ereditarietà dei permessi sull'elemento da quelli definiti a livello di lista. L'errore però si presentava solamente quando la lista in questione superava i 1000 elementi.
Per la precisione, l'errore scatenato era il seguente:

Incorrect syntax near the keyword 'SET'. Incorrect syntax near ')'. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon. Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

In pratica cioè, viene generata dal modello ad oggetti di Sharepoint una query con un errore di sintassi SQL. Chiaramente a fronte di un errore di questo genere, noi possiamo far poco.
Possiamo però capire da cos'è scatenato.
Dopo un pò di prove e dopo aver letto questo post, che segnala lo stesso errore utilizzando colonne di tipo lookup con l'opzione multiscelta attivata, mi sono studiato la configurazione della mia lista e sono arrivato a questa conclusione: tra i campi che avevo definito, erano presenti 4 campi di tipo utente/gruppo con l'opzione di scelta multipla attivata. I campi di tipo utente/gruppo alla fine dei giochi sono anche loro dei campi di tipo lookup, quindi tale errore avviene proprio perchè:
  • la lista ha più di 1000 elementi
  • la lista ha dei campi lookup (o di tipo utente/gruppo) con l'opzione di scelta multipla attiva
  • viene rotta l'ereditarietà dei permessi sull'elemento tramite il modello ad oggetti (item.BreakRoleInheritance(false);)
L'unico modo per ovviare a questo errore era quindi evitare di utilizzare campi di tipo lookup con scelta multipla.
Per fortuna invece che l'installazione del Service Pack 1 di WSS 3.0 e di MOSS 2007 ha risolto il problema in questione completamente !!