我管理的服務器大約有400多個具有相同數據庫模式的數據庫,我希望爲它們全部部署一個自定義的clr/.net用戶定義函數,有沒有任何容易方式做到這一點,或者必須單獨對每個數據庫進行?將用戶定義的函數部署到SQL 2005中的多個數據庫的最佳方法
最好的問候, 韋恩
我管理的服務器大約有400多個具有相同數據庫模式的數據庫,我希望爲它們全部部署一個自定義的clr/.net用戶定義函數,有沒有任何容易方式做到這一點,或者必須單獨對每個數據庫進行?將用戶定義的函數部署到SQL 2005中的多個數據庫的最佳方法
最好的問候, 韋恩
我覺得如果你在碩士(在MSSQL)創建它可以從該實例中的任何其他分貝參考。無論如何,似乎似乎仍然適用於存儲過程。
我要補充一點,如果這只是作品的數據庫都在同一個服務器實例......
你可以寫一個小的應用程序,如果所有400駐留到UDF部署到每個SQL Server實例的主在多臺服務器上。
這是目前我在做什麼(後我發佈的問題)。我想它可能是我猜的最好方法!謝謝 – mrwayne 2009-09-23 05:44:25
我只是創建一個動態腳本在每個數據庫上創建它。但在此之後,我會將它放入模態數據庫中,以便所有新數據庫都可以使用它創建。
如果函數被修改,您也可以使用相同的腳本推出更改。
我只是找到一些我認爲的方式。某種盜夢空間的;) 使用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」 部分閱讀問題。抱歉。
這種問題通常更好地解決在serverfault.com – mjv 2009-09-23 05:30:12