Condividi tramite


Risoluzione dei problemi relativi al progetto di database, alla compilazione e alla distribuzione

Durante la creazione, la modifica, la compilazione o la distribuzione di progetti di database, è possibile che si verifichino i seguenti problemi:

  • Errori in oggetti di database

  • Utilizzo di nuove parole riservate in Microsoft SQL Server 2005

  • Differenze nella compilazione da riga di comando

  • Dipendenze e script di aggiornamento

  • Gli identificatori delimitati potrebbero causare problemi con il ricaricamento del progetto

  • Lo stato interno del database non è coerente con il contenuto

  • Annulla modifiche in sospeso

  • Utente o gruppo di Windows NT non trovato

  • Nomi di oggetti duplicati e file esclusi

  • Nomi completi di server e database

  • Prestazioni dell'importazione dello schema del database

  • Errori di compilazione

  • Errori di sintassi durante l'utilizzo di riferimenti tra database

  • Ridenominazione di progetti e assembly SQLCLR

  • Sintassi non supportata per FULLTEXT STOPLIST

  • La clausola SORT_IN_TEMPDB non è importata

  • Lo stato degli identificatori delimitati viene perso quando si importano funzioni con valori di tabella contenenti più istruzioni

  • Alcuni errori del progetto non vengono risolti in seguito alla compilazione

  • Sintassi non corretta nello script post-distribuzione

Errori in oggetti di database

Quando un oggetto di database contiene uno o più errori di sintassi, i relativi messaggi di errore vengono visualizzati nella finestra Elenco errori.

Nota

Il messaggio di errore che viene visualizzato nella finestra Elenco errori dovrebbe indicare la soluzione all'errore. Dopo avere risolto l'errore e salvato l'oggetto di database, l'icona relativa a tale oggetto di database assumerà nuovamente lo stato tipico e l'errore verrà rimosso dalla finestra Elenco errori.

Utilizzo di nuove parole riservate in Microsoft SQL Server 2005

Di seguito sono elencate le nuove parole chiave riservate in SQL Server 2005: EXTERNAL, PIVOT, REVERT, TABLESAMPLE e UNPIVOT. Nella finestra Output viene indicato un errore se si utilizzano queste parole chiave riservate come nomi di oggetto schema in un progetto di database la cui destinazione è Microsoft SQL Server 2005 o SQL Server 2008.

Nota

Per ovviare a questa limitazione, è possibile racchiudere i nomi degli oggetti schema tra virgolette. È possibile, ad esempio, utilizzare "CREATE TABLE [External] (c1 INT)".

Differenze nella compilazione da riga di comando

Se si esegue una compilazione da riga di comando con il progetto aperto in Visual Studio, è possibile che non vengano rilevati tutti gli errori di compilazione che verrebbero rilevati durante la compilazione nell'interfaccia utente.

Nota

Per ovviare al problema, chiudere il progetto di database in Visual Studio prima di eseguire una compilazione da riga di comando.

Dipendenze e script di aggiornamento

Per generare l'ordine corretto degli oggetti in uno script di aggiornamento, in Confronto schema vengono esaminate le dipendenze degli oggetti. Se ad esempio una visualizzazione dipende da una tabella, è necessario creare quest'ultima prima della visualizzazione. Se l'oggetto che dipende dal secondo oggetto non utilizza un nome di schema completo, è possibile che la dipendenza non venga identificata e che l'ordine delle istruzioni nello script di creazione o aggiornamento sia errato. Questa differenza può essere causa di errori durante l'aggiornamento di una destinazione in base a un'origine o la distribuzione di modifiche in un database. Questo problema riguarda anche gli script di compilazione di database.

Nota

Per ovviare a questo problema, verificare di utilizzare nomi di schema completi per oggetti interessati da relazioni di dipendenza. In Visual Studio Premium e Visual Studio Ultimate è possibile utilizzare il refactoring del database per specificare i nomi completi degli oggetti. Per ulteriori informazioni, vedere Specifica completa dei nomi degli oggetti di database. Nell'esempio riportato di seguito, per garantire che la dipendenza venga identificata correttamente è necessario modificare la fine dell'istruzione in modo che faccia riferimento a [dbo].[KeysTable] anziché a KeysTable:

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Gli identificatori delimitati potrebbero causare problemi con il ricaricamento del progetto

Gli errori verranno visualizzati quando si salvano gli oggetti o si carica un database contenente identificatori tra virgolette se la casella di controllo SET QUOTED_IDENTIFIER è deselezionata nelle proprietà del database. Questa situazione potrebbe verificarsi qualora si importi uno schema da un database in cui vengono utilizzati identificatori tra virgolette.

Nota

Per ovviare al problema, è possibile procedere in due modi. È possibile modificare le definizioni degli oggetti affinché vengano utilizzate le parentesi quadre invece delle virgolette. È ad esempio possibile modificare "My Table" in [My Table]. In alternativa, è possibile scegliere Proprietà ProgettoDatabase dal menu Progetto, fare clic sulla scheda Proprietà database e selezionare la casella di controllo SET QUOTED_IDENTIFIER.

Lo stato interno del database non è coerente con il contenuto

Quando si utilizza Visual Studio Premium, si potrebbe ricevere l'errore seguente: "Lo stato interno del progetto di database non è coerente con il relativo contenuto. Scaricare il progetto e ricaricarlo per risolvere il problema". L'errore indica che in qualche modo il progetto, che mantiene un elenco dei file che ritiene di contenere, non è più sincronizzato con lo stato dei file. La causa più comune di questo errore è l'eliminazione di uno dei file del progetto dal disco mentre il progetto di database non è aperto. L'errore potrebbe anche essere la conseguenza di problemi che si sono verificati durante l'importazione di uno schema di database.

Nota

Per risolvere questo problema, è possibile fare clic su Sincronizza in Visualizzazione schema. Se il problema non viene risolto, è possibile scaricare e ricaricare il progetto di database. A tale scopo, fare clic su di esso in Esplora soluzioni. Scegliere Scarica progetto dal menu Progetto. Dopo avere scaricato il progetto, scegliere Ricarica progetto dal menu Progetto.

Annulla modifiche in sospeso

La Visualizzazione schema non viene aggiornata automaticamente dopo l'esecuzione del comando Annulla modifiche in sospeso del sistema di controllo delle versioni. Se ad esempio si rinomina una tabella o una colonna e quindi si annulla la modifica, in Visualizzazione schema verrà visualizzato il messaggio "Modifica esterna al file. È necessaria la risincronizzazione.".

Nota

Per ovviare a questo problema, è necessario fare clic su Sincronizza sulla barra degli strumenti di Visualizzazione schema.

Utente o gruppo di Windows NT non trovato

Se il progetto di database fa riferimento a un account di accesso non disponibile, verrà visualizzato il messaggio di errore "Impossibile trovare l'utente o il gruppo di Windows NT 'NomeDominio\NomeAccesso'. Ricontrollare il nome". Questo problema potrebbe verificarsi, ad esempio, se il computer in uso si trova in un dominio diverso da quello del database di cui è stato importato lo schema. Questa situazione si presenta in genere se si lavora da casa a un progetto di database creato altrove. In questo caso, non è possibile compilare né distribuire il progetto di database.

Nota

È possibile creare l'utente, omettendo la clausola FOR LOGIN. È possibile utilizzare ad esempio: CREATE USER [Domain\someLogin]. L'utente verrà creato quando si distribuisce il progetto di database e verrà associato all'accesso [Domain\someLogin], ma non è necessario un riferimento a tale accesso nel progetto di database.

Nomi di oggetti duplicati e file esclusi

Se nel progetto di database sono presenti nomi di oggetti duplicati (ad esempio due tabelle denominate Orders), nella finestra Elenco errori verrà visualizzato un messaggio di errore. Anche se si risolve il problema escludendo il file contenente la definizione di uno degli oggetti, il messaggio di errore non scomparirà immediatamente.

Nota

Per ovviare a questo problema, fare clic su Aggiorna oppure modificare il file contenente la definizione dell'oggetto, rinominare l'oggetto e salvare il file.

Nomi completi di server e database

Un oggetto creato in Visual Studio Premium viene denominato in base alla convenzione [schema].[oggetto].[figlio]. È possible fare riferimento a un oggetto contenuto in un altro database o in un altro server includendo il nome del database e del server come segue: [server].[database].[schema].[oggetto].[figlio]. Se si crea una stored procedure o una visualizzazione che fa riferimento a un oggetto che richiede un nome completo di server o database, verrà visualizzato un avviso.

Nota

Per risolvere l'avviso è necessario definire un riferimento tra database. Per ulteriori informazioni sui riferimenti tra database, vedere Utilizzo di riferimenti in progetti di database e Procedura: aggiungere riferimenti a progetti di database.

Nota importanteImportante

Se il progetto contiene avvisi non risolti riguardo ai nomi qualificati come server o database e si seleziona la casella di controllo Considera gli avvisi come errori nella scheda Compilazione delle proprietà per il progetto di database, la distribuzione avrà esito negativo. Si verifica questo errore perché i nomi qualificati come server o database generano avvisi. Se si utilizzano nomi di server e database completi, è necessario deselezionare la casella di controllo Considera gli avvisi come errori.

Prestazioni dell'importazione dello schema del database

Se si importa uno schema del database mentra la finestra Editor elenco dei test o Visualizzazione test è aperta, l'operazione di importazione richiederà una quantità di tempo decisamente superiore. Questo rallentamento si verificherà sia nella Creazione guidata nuovo progetto di database (se si sceglie di importare uno schema del database) sia durante l'operazione Importa schema database. Il problema si verifica anche se si chiudono le finestre Editor elenco dei test e Visualizzazione test prima di importare lo schema del database.

Nota

Per risolvere questo problema, è necessario chiudere le finestre Editor elenco dei test e Visualizzazione test, chiudere e riavviare Visual Studio e quindi importare lo schema del database. Per schemi di dimensioni inferiori, potrebbe essere necessario eseguire le operazioni seguenti: per il database di esempio AdventureWorks, l'operazione di importazione dello schema richiede 27 secondi se la finestra Editor elenco dei test è aperta e 48 secondi se talefinestra è aperta.

Errori di compilazione

Se la distribuzione non viene eseguita correttamente, non è possibile correggere l'errore aggiornando lo script di compilazione generato. È invece necessario correggere il file di origine utilizzato per generare lo script di compilazione. Facendo doppio clic su un errore di distribuzione nella finestra Elenco errori, nell'editor viene aperto lo script di compilazione e viene visualizzata la riga che ha provocato l'errore.

Nota

Per risolvere questo problema, è necessario visualizzare lo script di compilazione per determinare la causa dell'errore, quindi modificare il file di origine che contiene l'errore nel progetto di database. Se, ad esempio, lo script di post-distribuzione Script.PostDeployment.sql contiene un errore, è necessario modificare Script.PostDeployment.sql e non lo script di compilazione.

Errori di sintassi durante l'utilizzo di riferimenti tra database

È possibile che si verifichino uno o più errori di sintassi durante il salvataggio di una definizione di oggetto che contiene un riferimento a un oggetto in un altro database. È possibile, ad esempio, aggiungere un riferimento al progetto di database, definire variabili denominate RefServer e RefDatabase e assegnare loro valori. È quindi possibile definire una visualizzazione nel modo seguente:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName

Quando si salva questa definizione, è possibile che vengano visualizzati uno o più messaggi di errore che indicano sintassi errata. I messaggi di errore potrebbero fare riferimento al nome del database di convalida della fase di progettazione, creando potenziale confusione.

Nota

Per risolvere questo problema, è necessario racchiudere i nomi delle variabili tra parentesi. Per correggere questo esempio, modificarlo nel modo seguente:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName

Ridenominazione di progetti e assembly SQLCLR

Non si sarà in grado di distribuire un progetto di database che contiene un riferimento a un progetto SQLCLR o un assembly se lo si rinomina ma non si aggiorna il riferimento.

Nota

Per correggere questo problema, rimuovere il riferimento obsoleto e aggiungere un riferimento all'assembly o al progetto SQLCLR con il nome aggiornato.

Sintassi non supportata per FULLTEXT STOPLIST

Visual Studio Premium non modella la sintassi facoltativa FROM { [NomeDatabase.] NomeParoleNonSignificativeOrigine } | SYSTEM STOPLIST ] per l'istruzione CREATE FULLTEXT STOPLIST. La sintassi viene ignorata se si importa un oggetto che la utilizza.

Nota

Per correggere questo problema, è necessario aggiungere manualmente parole non significative allo script post-distribuzione. Per ulteriori informazioni, vedere Procedura: specificare script pre-distribuzione o di post-distribuzione.

La clausola SORT_IN_TEMPDB non è importata

Visual Studio Premium non è in grado di importare la clausola SORT_IN_TEMPDB per gli indici. Si supponga ad esempio di disporre del codice seguente:

CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
} 
WITH (SORT_IN_TEMPDB = ON)
GO

L'indice viene importato senza la clausola SORT_IN_TEMPDB.

Nota

Per correggere questo problema, è necessario correggere manualmente la definizione dell'indice quando si importano modifiche dal database nel progetto.

Lo stato degli identificatori delimitati viene perso quando si importano funzioni con valori di tabella contenenti più istruzioni

È possibile importare funzioni con valori di tabella contenenti più istruzioni, tuttavia lo stato della stringa dell'identificatore delimitato non viene salvato in SQL Server. Quando si importano queste funzioni, gli errori potrebbero verificarsi perché l'opzione Identificatori delimitati è attiva per impostazione predefinita.

Nota

Per correggere questo problema, è necessario modificare l'impostazione Identificatori delimitati per tutte le funzioni con valori di tabella contenenti più istruzioni dopo avere importato oggetti e impostazioni o dopo avere scritto aggiornamenti dal database al progetto.

Alcuni errori del progetto non vengono risolti in seguito alla ricompilazione

Alcuni errori che possono verificarsi nel progetto di database non vengono risolti non averne rimosso la causa, anche se il progetto viene ricompilato. Se ad esempio si elimina il file .sqlpermissions a cui viene fatto riferimento dal progetto mediante Esplora risorse, si verifica comunque un errore. Se si utilizza Esplora soluzioni per rimuovere il file dal progetto e ricompilarlo, l'errore persiste, anche se è stato corretto.

Nota

Per correggere questo problema, è necessario scegliere Rianalizza progetto nella barra degli strumenti in Esplora soluzioni.

Sintassi non corretta nello script post-distribuzione

Per impostazione predefinita, la modalità SQLCMD è disattivata nell'editor Transact-SQL in Visual Studio 2010. Questa modifica è stata apportata poiché Intellisense non è attivo quando la modalità SQLCMD è abilitata. Quando si esegue la distribuzione, è possibile che si verifichi l'errore seguente se sono state incluse istruzioni nello script post-distribuzione.

Incorrect syntax near ':'. C:\MySandbox\MySolution\MyProject\Scripts\Post-Deployment\Script.PostDeployment.sql

Nota

Per correggere questo problema, è necessario abilitare la modalità SQLCMD. Per abilitare la modalità SQLCMD, fare clic su Modalità SQLCMD nella barra degli strumenti dell'editor Transact-SQL.

Vedere anche

Attività

Procedura: modificare gli oggetti di database

Procedura: confrontare e sincronizzare i dati di due database

Concetti

Ridenominazione di tutti i riferimenti a un oggetto di database

Ridenominazione di tutti i riferimenti a un oggetto di database

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2010

È stata aggiunta una voce che avvisa gli utenti di una modifica nel comportamento predefinito di Visual Studio 2010 che potrebbe causare problemi per il loro script post-distribuzione.

Commenti e suggerimenti dei clienti.