общая хранимая процедура - PullRequest
2 голосов
/ 10 июля 2010

Допустим, у меня есть много баз данных sql сервера, которые имеют точно такую ​​же схему. Есть ли место, где я могу написать хранимую процедуру и подать заявку на все базы данных? Если я создаю хранимую процедуру для каждой базы данных, при необходимости я должен обновить их все.

Ответы [ 4 ]

6 голосов
/ 10 июля 2010

Вы можете создать хранимую процедуру в 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 ... движок пытается разрешить имя в master

Вы можете положиться на отложенное разрешение имен, чтобы не выдавать ошибку для ваших несуществующих таблиц в master

1 голос
/ 10 июля 2010

Проблема, с которой вы столкнетесь, - это привязки таблиц - как sproc узнает, какую базу данных вызывать? Так что вы, вероятно, захотите использовать комментарий marc_s плюс некоторый динамический SQL, где вы передаете имя базы данных (и имя пользователя) общему sproc.

create proc GetAllWidgets @dbname sysname, @owner nvarchar(100)
as
declare @sql nvarchar(4000) 
set @sql = 'select * from [' + @dbname + '].[' + @owner + '].Widget'
sp_executesql @sql
0 голосов
/ 15 мая 2013
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';
0 голосов
/ 10 июля 2010

Вы можете использовать центральный сервер управления и запускать скрипт изменения / создания одновременно для нескольких серверов. См. Msdn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...