web-dev-qa-db-fra.com

comment créer un type de données et le rendre disponible dans toutes les bases de données?

Si je crée une procédure stockée dans la base de données master et que je veux l'exécuter à partir de n'importe laquelle de mes bases de données, je viens de suivre ce lien:

Rendre une procédure disponible dans toutes les bases de données

qui me donnent cet exemple de code:

enter image description here

En suivant l'exemple ci-dessus, je peux appeler ma procédure depuis n'importe quelle base de données.

qu'en est-il si je crée un type de données de table dans master, comment puis-je l'utiliser dans l'une de mes bases de données?

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]

enter image description here

7

Il n'y a aucun moyen de le faire avec les types de table. Vous devrez répliquer cela dans toutes les bases de données. Mais, si vous souhaitez que ce type de table soit disponible lors de la création d'une nouvelle base de données, vous pouvez simplement l'ajouter dans la base de données modèle. Il existe quelques restrictions à l'utilisation des paramètres table. Vous ne pouvez même pas utiliser de paramètres table dans les bases de données. Vérifiez quelques détails ici .

6
Danilo Braga

Les types n'ont pas la possibilité de franchir les seuils de la base de données ou d'être marqués comme système. Vous devrez donc créer ce type dans chaque base de données où vous souhaitez l'utiliser. (Je ne suis pas un grand fan de compter sur des choses comme les données ou les types dans master, car elles disparaissent lorsque vous passez à un autre système.)

Pour les bases de données existantes, vous pouvez simplement créer le type dans une boucle. Pour les nouvelles bases de données (via CREATE DATABASE), créez le type dans model.

5
Aaron Bertrand