Wenn Sie Variablen deklarieren, leben sie nur während der Ausführung der Anweisung. Sie können keine Variable als Teil Ihrer DDL verwenden. Du könntest eine Reihe von Synonymen erstellen, aber ich denke darüber nach, es etwas zu tun.
Die Idee, dass sich Ihre Datenbanknamen im Laufe der Zeit ändern werden, scheint etwas ungewöhnlich und denkbar einmalig zu sein. Wenn Sie jedoch immer noch schnell auf eine neue Datenbank wechseln können, sollten Sie in Erwägung ziehen, direkt in SQL ein Light-Dienstprogramm zu erstellen, um die Ansichten automatisch so zu generieren, dass sie auf die neue Datenbank verweisen.
Eine Implementierung kann in etwa so aussehen.
Annahmen
- haben wir die folgenden Datenbanken Unter der Annahme.
- Angenommen, Sie bevorzugen das Dienstprogramm in SQL statt eine Anwendung zu erstellen, um es zu verwalten.
Code:
create database This;
create database That;
go
Konfiguration
Hier Ich gründe einige Konfiguration Tabellen auf. Sie werden zwei einfache Dinge tun:
- Erlauben Sie Ihnen, den Namen der Zieldatenbank für eine bestimmte Konfiguration anzugeben.
- Ermöglicht Ihnen, die DDL der Ansicht zu definieren. Die Idee ist der Idee von Dan Guzman ähnlich, wo die DDL dynamisch unter Verwendung von Variablen aufgelöst wird. Dieser Ansatz verwendet jedoch nicht den systemeigenen SQLCMD-Modus und verwendet stattdessen dynamisches SQL.
Hier sind die Konfigurationstabellen.
use This;
create table dbo.SomeToolConfig (
ConfigId int identity(1, 1) primary key clustered,
TargetDatabaseName varchar(128) not null);
create table dbo.SomeToolConfigView (
ConfigId int not null
references SomeToolConfig(ConfigId),
ViewName varchar(128) not null,
Sql varchar(max) not null,
unique(ConfigId, ViewName));
die Konfigurationseinstellung
Als nächstes setzen Sie die Konfiguration. In diesem Fall setze ich TargetDatabaseName
auf That
. Die SQL, die in SomeToolConfigView
eingefügt wird, ist die DDL für die Ansicht. Ich verwende zwei Variablen, eine {{ViewName}}
und {{TargetDatabaseName}}
. Diese Variablen werden durch die Konfigurationswerte ersetzt.
insert SomeToolConfig (TargetDatabaseName)
values ('That');
insert SomeToolConfigView (ConfigId, ViewName, Sql)
values
(scope_identity(), 'dbo.my_objects', '
create view {{ViewName}}
as
select *
from {{TargetDatabaseName}}.sys.objects;'),
(scope_identity(), 'dbo.my_columns', '
create view {{ViewName}}
as
select *
from {{TargetDatabaseName}}.sys.columns;');
go
Das Werkzeug
Das Werkzeug ist eine gespeicherte Prozedur, die eine Konfigurationskennung erfolgt. Basierend auf dieser Kennung werden die Ansichten in der Konfiguration gelöscht und neu erstellt.
Die Signatur für die gespeicherte Prozedur wie folgt aussehen kann:
exec SomeTool @ConfigId;
Sorry - verließ ich die Umsetzung aus, weil ich Scoot müssen, aber ich dachte, später als früher reagieren.
Hoffe, das hilft.
Ich würde vorschlagen, ein Synonym zu erstellen - aber dies würde Sie zwingen, zwei Teil Objektnamen zu verwenden, anstatt dreiteilig. – PhillipH