Wie erstelle ich einen Datentyp und stelle ihn in allen Datenbanken zur Verfügung?

7

Wenn ich eine gespeicherte Prozedur in der Master-Datenbank erstelle und sie aus einer meiner Datenbanken ausführen möchte, folge ich einfach diesem Link:

Bereitstellung einer Prozedur in allen Datenbanken

das gibt mir dieses Codebeispiel:

Geben Sie hier die Bildbeschreibung ein

Wenn ich dem obigen Beispiel folge, kann ich meine Prozedur von jeder Datenbank aus aufrufen.

Was ist, wenn ich im Master einen Tabellendatentyp erstelle, wie kann ich ihn in einer meiner Datenbanken verwenden?

use master

        IF NOT EXISTS (select * from sys.types where name = 'theReplicatedTables') 
                CREATE TYPE theReplicatedTables AS TABLE 
                (  OBJ_ID INT NOT NULL,
                  PRIMARY KEY CLUSTERED (OBJ_ID)
                );

use APIA_Repl_Sub
go
declare @the_tables [dbo].[theReplicatedTables]

Geben Sie hier die Bildbeschreibung ein

Marcello Miorelli
quelle

Antworten:

6

Bei Tabellentypen ist dies nicht möglich. Sie müssen dies in allen Datenbanken replizieren. Wenn Sie jedoch möchten, dass dieser Tabellentyp beim Erstellen einer neuen Datenbank verfügbar ist, können Sie ihn einfach zur Modelldatenbank hinzufügen. Es gibt einige Einschränkungen bei der Verwendung von Parametern mit Tabellenwerten. Sie können nicht einmal datenbankübergreifende Parameter mit Tabellenwerten verwenden. Sehen Sie sich einige Details hier .

Danilo Braga
quelle
5

Typen können keine Datenbankschwellenwerte überschreiten oder als System markiert werden. Sie müssen diesen Typ also in jeder Datenbank erstellen, in der Sie ihn verwenden möchten. (Ich bin kein großer Fan davon, mich auf Dinge wie Daten oder Typen im Master zu verlassen, da diese verschwinden, wenn Sie auf ein anderes System wechseln.)

Bei vorhandenen Datenbanken können Sie den Typ einfach in einer Schleife erstellen. CREATE DATABASEErstellen Sie für neue Datenbanken (bis ) den Typ in model.

Aaron Bertrand
quelle