Meilleure façon de déployer des fonctions définies par l'user sur plusieurs bases de données dans SQL 2005

Je gère un server avec environ 400+ bases de données qui ont le même schéma de database, je souhaite déployer une fonction personnalisée clr / .net définie par l'user à tous, y a-t-il un moyen facile de le faire, ou doit-il être fait individuellement? database?

Cordialement, Wayne

Je pense que si vous le créez en master (en MSSQL) il peut être référencé depuis n'importe quel autre db dans cette instance. Certainement semble fonctionner pour Stored Procs de toute façon.

Je devrais append que cela ne fonctionne que si les bases de données sont toutes sur la même instance de server …

Vous pouvez écrire une petite application pour déployer l'UDF sur le maître de chaque instance de server SQL si tous les 400 résident sur plusieurs servers.

Je voudrais juste créer un script dynamic pour le créer sur chaque database. mais après je l'ai mis dans les bases de données modales afin que toutes les nouvelles bases de données soient créées avec lui.

vous pouvez également utiliser le même script pour exclure des modifications si la fonction est modifiée.

Je trouve juste un moyen je pense. Une sorte de Inception;) USE data_base ne fonctionne que dans le context EXECUTE interne, donc …

DECLARE @sql NVARCHAR(max) DECLARE @innersql NVARCHAR(max) DECLARE c CURSOR READ_ONLY FOR SELECT name FROM sys.databases DECLARE @name nvarchar(1000) OPEN c SET @innersql = 'CREATE FUNCTION Foo(@x varchar(1)) RETURNS varchar(100) AS ' + ' BEGIN RETURN(@x + ''''some text'''') END;' -- ^^^^ ^^^^ -- every (') must be converted to QUAD ('''') instead of DOUBLE('') !!! FETCH NEXT FROM c INTO @name WHILE @@FETCH_STATUS = 0 BEGIN -- create function must be the first statement in a query batch ??? -- ok, will be... in inner EXEC... SET @sql = 'USE [' + @name + ']; EXEC (''' + @innersql + ''');' --PRINT @sql EXEC (@sql) FETCH NEXT FROM c INTO @name END CLOSE c DEALLOCATE c 

Ups, j'ai raté "CLR / .NET" question de lecture de partie. Pardon.