共享存储过程

syn*_*tic 2 sql t-sql sql-server stored-procedures

假设我有许多具有完全相同模式的sql server数据库.有没有可以编写存储过程并申请所有数据库的地方?如果我为每个数据库创建存储过程,在需要时,我必须全部更新它们.

gbn*_*gbn 6

如果为存储过程添加前缀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
Run Code Online (Sandbox Code Playgroud)

这当然是你通常不创建用户存储过程的原因sp... 启动...引擎尝试解析master中的名称

您可以依赖延迟名称解析来不为master中不存在的表引发错误