Condividi tramite


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

Aggiornamento: novembre 2007

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

  • Errori durante la creazione di progetti di database

  • Errori durante il tentativo di utilizzare SQL Server 2000 Database per la convalida della fase di progettazione

  • Errori in oggetti di database

  • Utilizzo di nuove parole riservate in Microsoft SQL Server 2005

  • Differenze nella compilazione da riga di comando

  • Chiavi simmetriche, chiavi asimmetriche e certificati

  • Dipendenze e script di aggiornamento

  • Errori durante l'aggiunta di se stessi come utente

  • Gli identificatori tra virgolette potrebbero causare problemi con il ricaricamento del progetto

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

  • Ricerca full-text

  • Oggetti SQLCLR

  • Annulla modifiche in sospeso

  • Utente o gruppo di Windows NT non trovato

  • Nomi di oggetti duplicati e file esclusi

  • CREATE ASSEMBLY non supporta i riferimenti a un file

  • Problemi di conversione da SQL Server 2000 a SQL Server 2005

  • Nomi qualificati come server e database

  • Supporto per proprietà estese

  • Prestazioni dell'importazione dello schema del database

  • Errori di compilazione

  • Progetti di database e impostazione TRUSTWORTHY

  • Server collegati e script di importazione

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

  • Indici XML con proprietà estese

  • Problemi di autorizzazioni con Team Foundation Build

  • Avvisi di token imprevisti durante la compilazione

  • Distribuzione da riga di comando da un computer x64 a un server database remoto non riuscita

Errori durante la creazione di progetti di database

Quando si crea un progetto di database senza disporre di autorizzazioni per la creazione di un database nell'istanza locale di Microsoft SQL Server utilizzata per la convalida della fase di progettazione, viene visualizzato un messaggio di errore.

Nota:

Utilizzare uno strumento quale SQL Server Management Studio per configurare le autorizzazioni per l'istanza utilizzata di SQL Server. Se non è possibile accedere con le credenziali di amministratore, può essere necessario chiedere all'amministratore di concedere le autorizzazioni necessarie per la creazione di database in SQL Server.

È necessario verificare che il nome dell'istanza specificato per il database di convalida della fase di progettazione sia corretto. Per ulteriori informazioni, vedere Procedura: specificare l'istanza locale di SQL Server da utilizzare per la convalida della fase di progettazione.

Se si esegue Visual Studio senza autorizzazioni amministrative, potrebbe venire visualizzato l'errore "Autorizzazione CREATE DATABASE negata nel database 'master'". Per risolvere questo errore, un utente con autorizzazioni sysadmin deve eseguire lo script seguente nel database di convalida della fase di progettazione:

USE master
GO
GRANT EXECUTE ON sp_detach_db TO public
GO

Errori durante il tentativo di utilizzare SQL Server 2000 Database per la convalida della fase di progettazione

Se si sostituisce il database utilizzato per la convalida della fase di progettazione con un'istanza di SQL Server 2000 e quindi si tenta di creare o modificare un progetto di database, verrà visualizzato un messaggio di errore. L'errore può essere analogo a "Sintassi errata vicino a 'ENABLE BROKER'". Il database di convalida della fase di progettazione utilizza le funzionalità di SQL Server 2005.

Nota:

È necessario specificare un'istanza valida di un database di SQL Server 2005 come database di convalida della fase di progettazione. Per ulteriori informazioni, vedere Procedura: specificare l'istanza locale di SQL Server da utilizzare per la convalida della fase di progettazione.

Errori in oggetti di database

Quando un oggetto di database contiene uno o più errori di sintassi, l'icona relativa a tale database assume la forma di un punto esclamativo di colore rosso e i messaggi di errore associati vengono visualizzati nella finestra Elenco errori. Per gli errori restituiti durante la convalida della fase di progettazione dall'istanza locale di SQL Server viene indicato il numero di riga corretto. Il numero di colonna viene tuttavia sempre indicato come colonna uno. Sia la riga sia la colonna sono corrette per gli errori di sintassi SQL.

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.

Utilizzo di nuove parole riservate in Microsoft SQL Server 2005

Di seguito sono elencate le nuove parole riservate in SQL Server 2005: EXTERNAL, PIVOT, REVERT, TABLESAMPLE e UNPIVOT. Se queste parole riservate vengono utilizzate come nomi di oggetti dello schema in un progetto di database destinato a SQL Server 2000, verrà visualizzato un messaggio di errore nella finestra Output.

Nota:

Per ovviare al problema, racchiudere tra virgolette i nomi degli oggetti dello schema. È 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.

Chiavi simmetriche, chiavi asimmetriche e certificati

In Visual Studio Team System Database Edition non è possibile creare chiavi simmetriche, asimmetriche o certificati come oggetti di database. Quando si importa uno schema di database, nello script pre-distribuzione vengono inseriti commenti segnaposto con i nomi delle chiavi e dei certificati. È necessario modificare lo script pre-distribuzione per creare tali oggetti. Analogamente, quando si confrontano schemi di database, nello Script di aggiornamento schema non sono contenuti i comandi T-SQL (Transact-SQL) necessari per creare chiavi simmetriche, chiavi asimmetriche o certificati mancanti. È necessario esportare lo script di aggiornamento nell'editor e aggiungere istruzioni per creare tali oggetti.

Dipendenze e script di aggiornamento

Per generare l'ordine corretto di oggetti in uno script di aggiornamento, in Confronto schema vengono esaminate le dipendenze degli oggetti. Se ad esempio una visualizzazione dipende da una tabella, quest'ultima deve essere creata prima della visualizzazione. Se l'oggetto che dipende dal secondo oggetto non utilizza uno nome di schema completo, è possibile che la dipendenza non sia stata identificata e che nello script di creazione o aggiornamento le istruzioni si trovino in un ordine errato. Questa discordanza 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. Nell'esempio riportato di seguito è possibile garantire che la dipendenza venga correttamente identificata modificando 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

Errori durante l'aggiunta di se stessi come utente

Se l'utente è membro del ruolo sysadmin e tenta di aggiungere se stesso come utente, verrà visualizzato un messaggio di errore di tipo "A questo accesso è già associato un account con un nome utente diverso". Questo errore si verifica perché l'utente è il proprietario del database di convalida della fase di progettazione, ovvero l'utente dbo in tale database. L'utente non può pertanto aggiungere di nuovo se stesso come utente del database.

Gli identificatori tra virgolette 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 Database Edition, 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 conserva 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 ovviare al problema, 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.

Ricerca full-text

Ricerca full-text e database di convalida della fase di progettazione

Se si disattiva la ricerca full-text nel database di convalida della fase di progettazione e si importa uno schema da un database contenente oggetti con indici full-text, gli oggetti verranno importati. Per tutti gli oggetti che utilizzano indici full-text, tuttavia verranno visualizzati errori nella finestra Elenco errori. Verranno visualizzati gli stessi errori se, dopo l'importazione degli oggetti, si disattiva la ricerca full-text nel database di convalida della fase di progettazione.

Nota:

Per ovviare a questo problema, attivare la ricerca full-text nel database di convalida della fase di progettazione. Per ulteriori informazioni sulla ricerca full-text, visitare il sito Web Microsoft (informazioni in lingua inglese).

Azioni sp_fulltext_table nelle definizioni degli indici full-text

Nella definizione degli indici full-text è consentita un'unica azione CREATE. Se si desidera eseguire un'azione come ACTIVATE, è necessario eseguirla nello script post-distribuzione per il database. Se si aggiungono altre azioni, verrà visualizzato il messaggio di errore "Nel batch principale non può essere presente un'istruzione DML di primo livello. Rimuovere l'istruzione e ritentare l'operazione".

Nota:

Per ovviare a questo problema, è necessario spostare l'istruzione sp_fulltext_table nello script post-distribuzione o in uno script incluso nello script post-distribuzione. Per ulteriori informazioni sugli script post-distribuzione, vedere Procedura: specificare script pre-distribuzione o di post-distribuzione.

Oggetti SQLCLR

Per impostazione predefinita, l'integrazione SQLCLR è disattivata in Microsoft SQL Server 2005. Se si importa uno schema da un database contenente oggetti SQLCLR e l'integrazione SQLCLR è disattivata nel database di convalida della fase di progettazione, gli errori non verranno visualizzati nella finestra Elenco errori. Si verificheranno, tuttavia, errori se si tenta di eseguire tali oggetti.

Nota:

Per ovviare al problema, eseguire l'editor T-SQL (Transcat-SQL) da Database Edition o uno strumento quale SQL Server Management Studio e connettersi al server come amministratore del sistema. In una finestra di query eseguire quanto segue:

exec sp_configure 'clr enabled', 1
reconfigure

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 dati di accesso non disponibili, 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 in un altro ambiente. In questo caso, non è possibile compilare né distribuire il progetto di database.

Nota:

Per questo problema non sono disponibili soluzioni. È possibile compilare e distribuire un progetto di database solo in un computer in cui i dati di accesso a cui viene fatto riferimento sono validi.

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.

CREATE ASSEMBLY non supporta i riferimenti a un file

È possibile aggiungere un assembly CLR a un'istruzione T-SQL (Transact-SQL) CREATE ASSEMBLY includendo il codice binario nell'istruzione oppure specificando un percorso di file per un assembly. In Database Edition quest'ultimo metodo non è supportato. Se si tenta di utilizzare questa sintassi, verrà visualizzato il messaggio di errore "L'istruzione CREATE ASSEMBLY può avere solo elementi binari nella relativa clausola FROM".

Nota:

Per questo problema non sono disponibili soluzioni.

Problemi di conversione da SQL Server 2000 a SQL Server 2005

Quando si converte un progetto di database da SQL Server 2000 a SQL Server 2005, i menu di scelta rapida relativi agli oggetti di SQL Server 2005 non verranno visualizzati in Visualizzazione schema.

Nota:

Per ovviare a questo problema, chiudere e riaprire il progetto di database dopo la conversione a SQL Server 2005.

Nomi qualificati come server e database

Un oggetto creato in Team Edition for Database Professionals 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 qualificato come 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 Cenni preliminari sui riferimenti tra database e Procedura: creare riferimenti tra database.

Nota importante:

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 questo tipo, deselezionare la casella di controllo Considera gli avvisi come errori.

Supporto per proprietà estese

In questa versione di Database Edition non sono supportate le proprietà estese per gruppi di file, nomi di file e vincoli di funzioni. Se si importa uno schema di database o uno script, le proprietà estese di tali tipi di oggetto verranno ignorate.

Inoltre, le proprietà estese che memorizzano un valore di TinyInt, SmallInt, UniqueIdentifier o bit verranno ignorate e inserite nel file ScriptsIgnoredOnImport.sql.

Nota:

Per ovviare a questo problema, è necessario creare manualmente le proprietà estese in uno script post-distribuzione. Per ulteriori informazioni, vedere Procedura: specificare script pre-distribuzione o di post-distribuzione.

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 ridotte questi passaggi potrebbero non essere necessari. Per il database di esempio AdventureWorks, l'operazione di importazione dello schema ha richiesto 27 secondi senza la finestra Editor elenco dei testaperta e 48 secondi con la finestra Editor elenco dei testaperta.

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 Permissions.sql contiene un errore, è necessario modificare Permissions.sql e non lo script di compilazione.

Progetti di database e impostazione TRUSTWORTHY

È necessario disporre delle autorizzazioni del ruolo sysadmin per attivare l'impostazione TRUSTWORTHY per un progetto di database o per aprire un progetto di database con l'impostazione TRUSTWORTHY attivata.

Nota:

Per risolvere questo problema, se l'impostazione TRUSTWORTHY non deve essere attivata, chiedere all'amministratore di disattivarla per il progetto di database. Se l'impostazione TRUSTWORTHY deve essere attivata, tutti gli sviluppatori che lavorano al progetto di database dovranno disporre delle autorizzazioni del ruolo sysadmin per il database. Se ogni sviluppatore lavora in un ambiente di sviluppo isolato, ciascuno dispone di una copia privata del database e può essere aggiunto in modo sicuro al ruolo sysadmin per il database.

Server collegati e script di importazione

È possibile ricevere un errore quando si distribuisce un progetto di database se si importano più script in un progetto di database. Questa situazione può verificarsi se lo stesso server collegato è stato definito più volte tra uno script e l'altro.

Nota:

Per aggirare questo problema, è possibile aggiungere il seguente T-SQL prima di ogni chiamata sp_addlinkedserver nello script di pre-distribuzione di LinkedServers.sql:

IF NOT EXISTS (SELECT * FROM master.dbo.sysservers WHERE srvname = N'<serverName>')

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

Indici XML con proprietà estese

È possibile che vengano visualizzati uno o più errori di sintassi quando si salva una definizione dell'oggetto per un indice XML contenente definizioni per una o più proprietà estese. Questo errore può verificarsi perché SQL Server 2005 non rimuove le proprietà estese quando un indice XML viene eliminato e ricreato. Quando si verifica questa situazione, è possibile che venga visualizzato l'errore seguente: "TSD4001: Impossibile aggiungere la proprietà. La proprietà 'NomeProprietàEstesa' esiste già per 'NomeIndiceXML'. (Errore SQL = 15233)".

Nota:

Per risolvere questo problema è necessario spostare la definizione della proprietà o delle proprietà estese allo script post-distribuzione e aggiungere le istruzioni seguenti immediatamente prima della definizione:

IF NOT EXISTS (SELECT * FROM fn_listextendedproperty('ExtendedPropertyName', 'SCHEMA', N'SchemaName', 'TABLE', N'TableName', 'INDEX', N'XMLIndexName')

Problemi di autorizzazioni con Team Foundation Build

È possibile ricevere errori relativi alle autorizzazioni quando si compila e si distribuisce un progetto di database utilizzando Team Foundation Build. Per impostazione predefinita, l'account del servizio per Team Foundation Build utilizza l'account Servizio di rete. Tale account non dispone delle autorizzazioni richieste per l'istanza di SQL Server nel computer di compilazione.

Nota:

Per risolvere questo problema, è necessario concedere autorizzazioni aggiuntive all'account Servizio di rete oppure sostituire l'account del servizio in cui viene eseguito Team Foundation Build con un account avente le autorizzazioni necessarie. Per ulteriori informazioni, vedere Autorizzazioni necessarie in Database Edition.

Avvisi di token imprevisti durante la compilazione

È possibile che vengano visualizzati avvisi di token imprevisti quando si compila il progetto di database utilizzando MSBuild. Se si esegue l'override di DefaultDataPath e non si specificano due barre rovesciate finali, la sequenza \" viene interpretata come un escape delle virgolette. Verranno visualizzati avvisi di compilazione e lo script di compilazione compilato potrebbe essere incompleto.

Nota:

Per risolvere questo problema è necessario specificare una barra rovesciata doppia alla fine del percorso. Per ulteriori informazioni, vedere Cenni preliminari sui processi di generazione e distribuzione di database.

Distribuzione da riga di comando da un computer x64 a un server database remoto non riuscita

Se non si specifica in modo esplicito una connessione di destinazione per il progetto di database, i valori dei percorsi di file e gruppi di file vengono impostati sulla base della struttura di directory del computer x64 locale. La distribuzione non verrà eseguita se anche nel server database remoto non è in esecuzione un sistema operativo x64 e una versione a 32 bit di SQL Server.

Nota:

Per risolvere il problema, prima di distribuire il database è necessario specificare in modo esplicito una connessione al database di destinazione nelle proprietà del progetto di database. Per ulteriori informazioni, vedere la classe Procedura: configurare i progetti di database per la generazione e la distribuzione.

Vedere anche

Attività

Procedura: modificare gli oggetti di database

Procedura: visualizzare le differenze dei dati

Concetti

Panoramica sulla terminologia di Database Edition

Altre risorse

Ridenominazione di oggetti di database