Sha*_*pta 13 sql database sql-server stored-procedures function
我创建了一个在特定指定位置进行数据库备份的查询.我想将它用作存储过程,但这应该充当全局存储过程,以便每当调用此SP时.然后进行数据库备份.
它使用DB_Name()来获取所有者数据库的数据库备份.
是否可以创建任何此类SP或功能.
我正在使用sql server 2005
mas*_*ani 17
第一个解决方
如果在master数据库中创建sp并将其标记为系统对象并在其前面加上"sp_",则将存在将由所有数据库共享的单个副本.
和第二溶液从MSDN:
可以使用添加到过程名称的#和##前缀创建类似于临时表的专用和全局临时存储过程.#表示本地临时存储过程; ##表示全局临时存储过程.SQL Server关闭后,这些过程不存在.
一个例子 :
USE master
CREATE TABLE test (c1 VARCHAR(50))
INSERT test VALUES('master')
go
CREATE PROC sp_test AS
SELECT * FROM test
GO
USE northwind
CREATE TABLE test (c1 VARCHAR(50))
INSERT test VALUES('northwind')
USE pubs
CREATE TABLE test(c1 VARCHAR(50))
INSERT test VALUES('pubs')
USE pubs
EXEC sp_test --returns 'master'
USE master
EXEC sp_MS_marksystemobject sp_test
USE pubs
EXEC sp_test --returns 'pubs'
USE northwind
EXEC sp_test --returns 'northwind'
Run Code Online (Sandbox Code Playgroud)
必须遵循三个步骤来创建一个“系统”存储过程,该存储过程可以被服务器上的所有数据库访问,并且在调用时能够在当前数据库的上下文中运行。
下面的示例代码
--Step 1, Create in master database
USE master
GO
--Step 2, Prefix with sp_ the custom proc
CREATE PROCEDURE sp_myCustomSystemProc
AS
BEGIN
PRINT 'myCustomCode'
END
GO
--Step 3, Mark as system object so proc executes in context of current db
EXEC sp_ms_marksystemobject 'sp_myCustomSystemProc'
GO
Run Code Online (Sandbox Code Playgroud)