我管理的服务器有大约400多个具有相同数据库架构的数据库,我希望为他们部署自定义clr / .net用户定义函数,是否有任何 easy 方法可以做这个,还是必须单独对每个数据库进行?
最诚挚的问候, 韦恩
答案 0 :(得分:2)
我认为如果你在master中创建它(在MSSQL中),它可以从该实例中的任何其他db引用。当然,无论如何似乎都适用于Stored Procs。
我应该补充一点,这只适用于数据库全部位于同一服务器实例上的情况......
如果所有400个驻留在多个服务器上,您可以编写一个小应用程序将udf部署到每个SQL服务器实例的主服务器。
答案 1 :(得分:0)
我只是创建一个动态脚本来在每个数据库上创建它。但之后我会把它放在模态数据库中,以便用它创建所有新数据库。
如果函数被修改,你也可以使用相同的脚本推出更改。
答案 2 :(得分:0)
我只想找到一些方法。某种开始;) USE data_base仅适用于内部EXECUTE上下文,因此......
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,我错过了“CLR / .NET”部分阅读问题。遗憾。