假設我有很多具有完全相同架構的sql服務器數據庫。有什麼地方可以寫一個存儲過程並申請所有數據庫嗎?如果我爲每個數據庫創建存儲過程,那麼在需要時,我必須全部更新它們。共享存儲過程
共享存儲過程
回答
您遇到的問題是表綁定 - sproc如何知道要調用哪個數據庫?因此,您可能需要使用marc_s的註釋以及一些將數據庫名稱(和用戶名)傳遞給共享存儲過程的動態SQL。
create proc GetAllWidgets @dbname sysname, @owner nvarchar(100)
as
declare @sql nvarchar(4000)
set @sql = 'select * from [' + @dbname + '].[' + @owner + '].Widget'
sp_executesql @sql
謝謝你的答覆nswer。我實際上知道這樣做。我只是想我可能會錯過一些大的東西(比如可能通過擴展存儲過程或clr存儲過程等)。 – synergetic 2010-07-10 07:14:04
您可以使用中央管理服務器並同時針對多個服務器運行您的alter/create腳本。 See msdn
因此,每個db仍然存儲一個proc,但我可以一次更新它們,對吧? – synergetic 2010-07-10 07:42:26
是的。請參閱http://technet.microsoft.com/en-us/library/bb964743.aspx – SPE109 2010-07-10 11:40:13
您可以創建master
,在如果你sp
前綴的存儲過程,當前數據庫上下文中運行存儲過程。這裏有一個例子:
USE master
GO
CREATE DATABASE Test1 --for demo purposes
GO
CREATE PROCEDURE dbo.sp_DoStuff
AS
SET NOCOUNT ON
SELECT DB_NAME()
GO
USE Test1
GO
EXEC dbo.sp_DoStuff
GO
USE msdb
GO
EXEC dbo.sp_DoStuff
GO
USE master
GO
DROP DATABASE Test1
DROP PROCEDURE dbo.sp_DoStuff
GO
這當然是你爲什麼不與正常啓動sp
創建用戶存儲的特效...發動機試圖在主解析名稱
你可以依靠延遲名稱分辨率不扔你不存在的表的誤差在主
USE master;
GO
CREATE PROC dbo.sp_YourProc
AS
BEGIN
SET NOCOUNT ON;
SELECT DB_NAME()EXEC sys.sp_MS_marksystemobject 'ForEach';
END
GO
EXEC sys.sp_MS_marksystemobject 'sp_YourProc';
- 1. 多線程文件(共享存儲器)
- 2. 通過共享內存共享指針
- 3. 共享首選項存儲
- 4. Android共享內部存儲
- 5. 使用共享存儲器
- 6. 具有共享存儲器
- 7. 轉儲共享內存
- 8. WCF服務共享存儲
- 9. 照片共享vs存儲
- 10. 升壓共享存儲型
- 11. git - 共享存儲庫sgid
- 12. 訪問共享存儲器
- 13. Alfresco共享存儲空間
- 14. 通過共享內存進程之間共享指針IPC
- 15. 如何在存儲過程之間共享數據
- 16. 通過雲端存儲共享文件的應用程序
- 17. 在SQL Server中的存儲過程之間共享表變量
- 18. 從SQL存儲過程共享自動增量值
- 19. 多個數據庫的共享存儲過程
- 20. 2共享遠程存儲庫的本地存儲庫
- 21. Git共享存儲庫不能作爲'共享'
- 22. 共享共享數據存儲庫的數據卷
- 23. 父進程和子進程共享一個IPC共享內存
- 24. C程序存儲器共享2個程序
- 25. 並行線程mutexattr進程共享的存儲器泄漏
- 26. OpenMP共享陣列加載/存儲
- 27. C#,存儲/訪問共享成員
- 28. Appengine不存儲數據的共享Memcache
- 29. android共享偏好存儲多個值;
- 30. Oracle共享存儲器錯誤
您可以創建一個名爲「共享」,然後只把那些存儲的特效有使用'EXEC Shared.dbo.StoredProcName'執行它們單獨的數據庫 – 2010-07-10 06:41:37