Condividi tramite


Utilizzo di riferimenti in progetti di database

È possibile aggiungere diversi tipi di riferimenti ai progetti di database per gestire situazioni diverse. Le procedure utilizzabili possono variare leggermente a seconda dei diversi tipi di riferimenti.

Nella tabella seguente vengono mostrati i tipi di riferimenti che è possibile aggiungere e le situazioni appropriate per ciascuno di essi.

Tipo di riferimento

Motivi per l'utilizzo

Un progetto di database (.dbproj) nella soluzione corrente.

Aggiungere questo tipo di riferimento per rendere possibili diversi scenari.

  • È possibile fare riferimento a un oggetto di database di un progetto da un altro progetto aggiungendo il riferimento e definendo una variabile per il nome del server (facoltativo) e una variabile per il nome del database che contiene l'oggetto. Questo tipo di riferimenti tra database vengono utilizzati se il database fa riferimento a oggetti in altri database. Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database che fanno riferimento ad altri database.

Se si aggiunge un riferimento a un altro progetto ma non si definiscono variabili, viene creato un progetto composto. Quando si distribuisce questo tipo di progetto, vengono inoltre distribuiti gli oggetti inclusi in altri progetti. Per ulteriori informazioni, vedere Composizione di progetti utilizzando riferimenti più avanti in questo argomento.

L'output di un progetto di database (file con estensione dbschema) della soluzione corrente o di un'altra soluzione

Se è necessario fare riferimento a un altro database ma si desidera isolare tale database a altri sviluppatori, è possibile aggiungere un riferimento a un file dello schema del database. Potrebbe risultare consigliabile adottare questo approccio per impedire che vengano apportate modifiche al database oppure nei casi in cui quest'ultimo non può essere aggiornato. È ad esempio possibile aggiungere un riferimento a un file con estensione dbschema se il progetto di database deve fare riferimento a chiavi o account di accesso condivisi e definiti nel server e utilizzati in più progetti di database. Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database che fanno riferimento a oggetti server condivisi.

Potrebbe risultare consigliabile fare riferimento a un file con estensione dbschema contenente le definizioni relative agli oggetti server senza necessità di verificare le impostazioni del server quando si distribuisce il progetto di database. Per questo scenario, è possibile aggiungere un riferimento al file master.dbschema e definire un valore letterale per la variabile del database il cui valore è "master". In questo modo, i riferimenti agli oggetti definiti nel database "master" possono essere risolti senza errori. Per ulteriori informazioni sui valori letterali, vedere Creazione di riferimenti a database utilizzando valori letterali più avanti in questo argomento.

Un file master.dbschema che contiene definizioni di oggetti di sistema

Se si desidera fare riferimento a oggetti di sistema, quali stored procedure, tabelle, visualizzazioni o cataloghi del sistema, è necessario aggiungere un riferimento al file master.dbschema appropriato in modo che sia possibile risolvere tali riferimenti. È ad esempio possibile fare riferimento a sys.sysobjects in una stored procedure. Un file master.dbschema viene fornito con Visual Studio Premium per ogni versione supportata di SQL Server. I file con estensione dbschema sono disponibili in [Programmi]\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Versione\DBSchemas, dove Versione è la versione di SQL Server utilizzata (ad esempio 2005 o 2008).

Per questo scenario, è possibile aggiungere un riferimento al file master.dbschema appropriato e definire un valore letterale per la variabile del database il cui valore è "master". In questo modo, i riferimenti agli oggetti definiti nel database "master" possono essere risolti senza errori. Per ulteriori informazioni sui valori letterali, vedere Creazione di riferimenti a database utilizzando valori letterali più avanti in questo argomento.

Un progetto CLR (Common Language Runtime) SQL nella soluzione corrente

È possibile fare riferimento a un progetto SQLCLR nella soluzione corrente se si sviluppano uno o più oggetti SQLCLR che si desidera distribuire con il progetto di database. Quando si distribuisce il progetto di database, viene distribuito anche l'assembly prodotto dal progetto SQLCLR a cui viene fatto riferimento. L'istruzione CREATE ASSEMBLY si basa sulle proprietà specificate per il riferimento. Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database che fanno riferimento a oggetti SQLCLR e Utilizzo di riferimenti tra database più avanti in questo argomento.

Un assembly SQLCLR, di un progetto nella soluzione corrente o di un'altra origine

È possibile aggiungere un riferimento a un assembly SQLCLR se il progetto di database deve fare riferimento a oggetti definiti nell'assembly in questione che tuttavia non vengono sviluppati contemporaneamente o dallo stesso team. Quando si distribuisce il progetto di database, viene distribuito anche l'assembly a cui viene fatto riferimento.

Un componente XML Schema Definition, definito in un file con estensione xsd

Uno schema deve essere registrato affinché possa essere associato a una variabile, a un parametro o a una colonna per creare parametri, colonne e variabili in XML tipizzato. Può risultare opportuno utilizzare XML tipizzato se una delle condizioni seguenti è vera:

  • Si dispone di schemi per i dati XML e si desidera che il server convalidi tali dati in base agli schemi stessi.

  • Si desidera ottimizzare archiviazione e query basate sulle informazioni di tipo.

  • Si desidera sfruttare al meglio le informazioni di tipo quando si compilano le query.

Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database che utilizzano insiemi di XML Schema.

Definizione di riferimenti tra database

Se si creano o importano oggetti di database che fanno riferimento a oggetti inclusi in altri database, è necessario definire un riferimento corrispondente nelle proprietà del progetto di database. Per ogni database a cui si fa riferimento, è possibile definire le variabili SETVAR che corrispondono al server e al database a cui viene fatto riferimento. Quando si modifica una definizione di oggetto in modo da includere il riferimento, è possibile definirla utilizzando tali variabili al posto dei nomi espliciti del server e del database. Quando si compila il progetto di database, le variabili vengono sostituite dai valori specificati corrispondenti.

Scenari per i riferimenti tra database

In Visual Studio Premium vengono supportati gli scenari seguenti:

  • È stato creato un progetto di database ed è stato importato lo schema di un database esistente. Lo schema contiene oggetti che fanno riferimento a oggetti presenti in uno o più database. Nelle proprietà del progetto, si definisce un riferimento corrispondente e si sostituiscono i nomi espliciti del server e del database con le variabili SETVAR. A causa di questa definizione, i riferimenti tra database possono essere convalidati in fase di progettazione. È inoltre possibile distribuire il progetto di database a un ambiente di sviluppo isolato, dove il nome del server di destinazione può essere diverso dal nome del server di destinazione nell'ambiente di produzione.

  • Si dispone di un progetto di database contenente riferimenti tra database che utilizzano le variabili SETVAR per identificare i server e i database. Si desidera modificare i nomi di tali variabili e aggiornare le definizioni di oggetto che contengono tali riferimenti.

  • Si desidera fare riferimento a schemi di database aggiuntivi dal progetto di database che si sta sviluppando. Si desidera condividere con il team solo quegli schemi, senza dovere condividere anche gli altri progetti di database. È possibile aggiungere un riferimento ai file dello schema del database (con estensione dbschema) degli altri progetti e archiviare solo i file di schema nel controllo della versione. Questo approccio consente di limitare l'accesso ai progetti di database che contengono gli schemi a cui si desidera fare riferimento. Utilizzare inoltre questo approccio se si desidera distribuire un progetto di database ma non i progetti che dipendono da quest'ultimo.

È possibile utilizzare ilrefactoring del database per eseguire attività aggiuntive con i riferimenti tra database. Per ulteriori informazioni, vedere Procedura: rinominare i riferimenti a un server o a un database.

Riferimenti a progetti di database e file di schema

Quando si aggiunge un riferimento a un progetto di database, è possibile specificare un altro progetto di database o un file dello schema generato quando si compila un progetto di database.

È necessario fare riferimento a un altro progetto di database se la condizione seguente è vera:

  • È necessario modificare sia gli schemi del database che conterrà il riferimento sia quelli del database a cui si fa riferimento. Quando si distribuisce il progetto di database che contiene il riferimento, verrà distribuito anche il progetto di database a cui si fa riferimento.

È necessario fare riferimento a un file dello schema se una delle condizioni seguenti è vera:

  • È necessario fare riferimento a un database il cui progetto non è nella soluzione corrente.

  • È necessario distribuire un singolo progetto senza distribuire i progetti da cui dipende.

  • Si fa riferimento a uno schema del database che probabilmente non cambierà. In questo scenario, è possibile archiviare il file dello schema nel controllo della versione.

Limitazioni dei riferimenti tra database

Quando si importa uno schema del database, i riferimenti ad altri database nelle definizioni di oggetti generano degli avvisi poiché il progetto di database non può convalidare tali riferimenti prima che vengano distribuiti. Dopo avere definito i riferimenti del database nelle proprietà del progetto, è possibile convalidare le definizioni di oggetto e risolvere gli avvisi. È quindi possibile aggiornare le definizioni di oggetto sostituendo i nomi dei server e dei database con delle variabili. È anche possibile utilizzare il refactoring per eseguire questa sostituzione. Per ulteriori informazioni, vedere Procedura: aggiungere riferimenti a progetti di database e Procedura: rinominare i riferimenti a un server o a un database.

Le variabili e i valori relativi ai server e ai database a cui viene fatto riferimento non sono specifici di una configurazione di compilazione. Per specificare al prompt dei comandi il server e il database è necessario fare riferimento ad essi in termini di variabili di MSBuild che possono essere sostituite al momento della distribuzione.

Vengono inoltre applicate le limitazioni seguenti:

  • È possibile aggiungere un riferimento a un database solo se quest'ultimo dispone di un progetto di database corrispondente.

  • Per poter aggiungere un riferimento al file dello schema di un progetto di database, quest'ultimo deve essere compilato.

  • È necessario compilare i progetti di database a cui si fa riferimento in modo che i riferimenti tra database si risolvano senza avvisi.

  • Se si modifica la configurazione della build della soluzione o dei progetti di database a cui si fa riferimento, potrebbe essere necessario ricompilare la soluzione in modo che i riferimenti tra database si risolvano senza avvisi.

  • Se si fa riferimento a un oggetto in un progetto di database su un altro server, è necessario definirlo come server collegato sul server di destinazione. Per ulteriori informazioni, vedere Procedura: aggiungere riferimenti a progetti di database.

  • Non è necessario un riferimento tra database per riferirisi al database master.

  • I riferimenti che includono variabili SETVAR devono sempre prendere il modulo "[$(NomeVariabile)]". Se si omettono le parentesi quadre, potrebbe non essere possibile distribuire il progetto di database.

  • I nomi delle variabili SETVAR devono essere univoci. Se il server ha lo stesso nome del database, è necessario definire variabili con nomi diversi ma che vengono risolte nello stesso valore.

Considerazioni sulla sicurezza

Il file dello schema creato quando si compila un progetto di database contiene le informazioni di schema relative al progetto. È necessario limitare l'accesso a questo tipo di file per proteggere le informazioni dello schema. È possibile condividere i file dello schema con il team archiviandoli nel controllo della versione, piuttosto che distribuendoli al server di destinazione. Se il progetto di database per il database a cui si fa riferimento è nella stessa soluzione, altri sviluppatori del progetto potranno accedere quando eseguiranno la sincronizzazione al controllo della versione e compileranno la soluzione.

Esempio di riferimento tra database

Se si dispone di due progetti di database, ReportDb e DependentDb, è possibile fare riferimento agli oggetti contenuti in DependentDb da ReportDb. Iniziare aggiungendo un riferimento nelle proprietà del progetto di database DependentDb e definire le variabili come segue:

  • RefServer

  • RefDatabase

Il valore per RefServer è il nome del server su cui risiede DependentDb. Il valore per RefDatabase è il nome del database di destinazione distribuito dal progetto DependentDb. In questo esempio, RefServer ha il valore StageSvr e RefDatabase ha il valore DepDb.

È possibile aggiungere una vista a ReportDb che visualizzi tutte le colonne della tabella Employee in DependentDb. Distribuire la tabella al database denominato DepDb nel server con nome StageSvr. Per creare la definizione di oggetto per la vista, aggiungere le istruzioni seguenti:

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

Composizione di progetti utilizzando riferimenti

Nei progetti di database e server non è possibile prevedere tutti gli scenari che potrebbero essere riscontrati durante la fase di sviluppo del database. Per affrontare scenari più complessi, è possibile creare progetti composti da due o più progetti diversi.

Per creare un progetto composto, si aggiunge a un progetto di database un riferimento a un altro progetto server o di database senza specificare valori per le variabili dei server e dei database inclusi nei progetti a cui viene fatto riferimento. Quando si aggiunge questo tipo di riferimento, il progetto al quale viene aggiunto il riferimento include tutti gli oggetti e le impostazioni presenti nel progetto a che punta il riferimento.

La creazione di un progetto composto consente di affrontare gli scenari seguenti:

  • È possibile gestire schemi del database che fanno riferimento a chiavi e account di accesso condivisi. Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database che fanno riferimento a oggetti server condivisi.

  • È possibile suddividere un database di grandi dimensioni in sottoprogetti in modo da migliorare le prestazioni o separare schemi e tipi di oggetto. È inoltre possibile apportare questa modifica se più database condividono gli stessi oggetti ma risultano diversi per altri aspetti. È possibile suddividere un progetto in due o più sottoprogetti solo se tale modifica non crea un riferimento circolare.

Quando si distribuisce il progetto composto, vengono distribuiti anche gli oggetti presenti in tutti i progetti di database a cui viene fatto riferimento. Per ulteriori informazioni, vedere Avvio dello sviluppo in team di database di grandi dimensioni.

Riferimenti a un database utilizzando valori letterali

È possibile definire variabili di riferimento a database per specificare il nome del database a cui viene fatto riferimento nell'ambiente di distribuzione di destinazione. Se non si desidera utilizzare variabili SQLCMD, perché il nome del database di destinazione è sempre lo stesso nell'ambiente di distribuzione, è possibile specificare invece un valore letterale il cui valore è il nome del database a cui viene fatto riferimento.

Se si utilizzano variabili, la sintassi può risultare analoga alla seguente:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [($MasterDbVar)].[dbo].[spt_values].

Se si utilizza invece un valore letterale, la sintassi può risultare analoga alla seguente:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [master].[dbo].[spt_values]

Per ulteriori informazioni su come specificare un valore letterale, vedere Procedura: aggiungere riferimenti a progetti di database.

Vedere anche

Attività

Procedura: rinominare i riferimenti a un server o a un database

Procedura: aggiungere riferimenti a progetti di database

Concetti

Creazione e modifica di oggetti server e di database