Condividi tramite


Confronto di database definiti dall'utente per la corrispondenza con i database master

Questa regola consente di controllare se i database definiti dall'utente vengono configurati utilizzando regole di confronto corrispondenti a quelle per il database master o model.

Procedure consigliate

È consigliabile fare in modo che le regole di confronto dei database definiti dall'utente corrispondano a quelle del database master o model. In caso contrario, possono verificarsi conflitti relativi alle regole di confronto che potrebbero impedire l'esecuzione del codice. Quando, ad esempio, tramite una stored procedure viene creato un join tra una tabella e una tabella temporanea, il batch in SQL Server potrebbe terminare e potrebbe essere restituito un errore di conflitto tra regole di confronto se le regole di confronto del database definito dall'utente differiscono da quelle del database model. Questo problema si verifica in quanto le tabelle temporanee vengono create in tempdb, le cui regole di confronto sono basate su quelle del database model.

In caso di errori di conflitto tra regole di confronto, si consideri una delle soluzioni seguenti:

  • Esportare i dati dal database utente e importarli in nuove tabelle in cui vengono utilizzate le stesse regole di confronto dei database master e model.

  • Ricompilare i database di sistema in modo che vengano utilizzate regole di confronto corrispondenti a quelle del database utente. Per ulteriori informazioni su come ricompilare i database di sistema, vedere Ricompilazione di database di sistema.

  • Modificare le stored procedure tramite cui vengono creati join tra le tabelle utente e le tabelle in tempdb in modo che le tabelle in tempdb vengano create utilizzando le regole di confronto del database utente. A tale scopo, aggiungere la clausola COLLATE database_default alle definizioni delle colonne della tabella temporanea, come illustrato nell'esempio seguente:

    CREATE TABLE #temp1 ( c1 int, c2 varchar(30) COLLATE database_default )