我正在使用SQL Server 2008,我想将存储过程从一个数据库复制到另一个。 怎么样?
右键单击数据库下的SP,然后单击脚本存储过程为>创build到>文件,它将创build一个SQL脚本文件,然后在另一个数据库上运行该脚本。
只需使用Management Studio为存储过程生成一个脚本,将脚本保存到一个文件,然后在另一个SQL Server上运行它。
从内存中右键单击数据库,并在所有任务是生成脚本或类似的东西。 这将产生Transact-SQL来创build你select的任何东西。
JR
这里是一个查询(设置输出到文本)来返回存储过程:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE='PROCEDURE'
上面的答案都是好的,将工作。 问题是(无论如何,在我的世界里):你的sprocs在哪里?
就我而言,我们在应用程序数据库(业务逻辑等)中有一套sprocs套件,另一套系统pipe理sprocs在master中。
对我来说kicker是不得不移动(并保持同步)的主人sprocs ….
您可以复制所有数据库,包括stored procedures,也许这是你所需要的:
进入MS SQL Server Managment studio – >右键点击源数据库,进入“任务”菜单并select“复制数据库”。
这将创造一个包括表,数据和存储过程的源头。
@Ash Machine有一个好主意,但他使用了错误的查询,这会将返回的结果限制为nvarchar(4000)。
改为使用
Select definition from sys.sql_modules where object_id = object_id('<procname>')
你会得到完整的未被截断的定义。
在大多数实际情况下,当你使用输出到文本的时候,这在像SSMS这样的graphics用户界面中工作,并且将最大字符的列字符设置为8192.如果某些行宽度大于8192,则失败。 但请注意,这是查询工具的限制,而不是查询的限制。 这个限制也进入了SQLServer 2012。
使用ADO.NET也许通过PowerShell在SQLPSX sqlise中,您可以得到完整的定义。
如果您只想将过程定义的备份存储在同一数据库的某个表中,那么它也可以工作
SSMS中还有一些选项可以让它为用户生成权限 – 这很方便。
工具>选项>脚本
您也可以通过单击“对象浏览器”窗格中的“存储过程”来编写多个脚本,然后在“对象资源pipe理器详细信息”窗口中select多个过程 右键点击select的程序,你就可以开始了。
我更喜欢redgate的SQL比较。