SQL-DMO的SQL Server 2008替代方案
我以前使用SQL-DMO从数据库自动生成脚本。 现在我升级到SQL Server 2008,我不想再使用此功能,因为Microsoft将放弃此功能 我是否可以使用其他方法连接到服务器并从数据库自动生成脚本 欢迎任何回答。提前谢谢 这是我以前使用的程序:SQL-DMO的SQL Server 2008替代方案,sql,sql-server-2008,sqldmo,Sql,Sql Server 2008,Sqldmo,我以前使用SQL-DMO从数据库自动生成脚本。 现在我升级到SQL Server 2008,我不想再使用此功能,因为Microsoft将放弃此功能 我是否可以使用其他方法连接到服务器并从数据库自动生成脚本 欢迎任何回答。提前谢谢 这是我以前使用的程序: CREATE PROC GenerateSP ( @server varchar(30) = null, @uname varchar(30) = null, @pwd varchar(30) = null, @dbname varcha
CREATE PROC GenerateSP (
@server varchar(30) = null,
@uname varchar(30) = null,
@pwd varchar(30) = null,
@dbname varchar(30) = null,
@filename varchar(200) = 'c:\script.sql'
)
AS
DECLARE @object int
DECLARE @hr int
DECLARE @return varchar(200)
DECLARE @exec_str varchar(2000)
DECLARE @spname sysname
SET NOCOUNT ON
-- Sets the server to the local server
IF @server is NULL
SELECT @server = @@servername
-- Sets the database to the current database
IF @dbname is NULL
SELECT @dbname = db_name()
-- Sets the username to the current user name
IF @uname is NULL
SELECT @uname = SYSTEM_USER
-- Create an object that points to the SQL Server
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
IF @hr <> 0
BEGIN
PRINT 'error create SQLOLE.SQLServer'
RETURN
END
-- Connect to the SQL Server
IF @pwd is NULL
BEGIN
EXEC @hr = sp_OAMethod @object, 'Connect', NULL, @server, @uname
IF @hr <> 0
BEGIN
PRINT 'error Connect'
RETURN
END
END
ELSE
BEGIN
EXEC @hr = sp_OAMethod @object, 'Connect', NULL, @server, @uname, @pwd
IF @hr <> 0
BEGIN
PRINT 'error Connect'
RETURN
END
END
--Verify the connection
EXEC @hr = sp_OAMethod @object, 'VerifyConnection', @return OUT
IF @hr <> 0
BEGIN
PRINT 'error VerifyConnection'
RETURN
END
SET @exec_str = 'DECLARE script_cursor CURSOR FOR SELECT name FROM ' + @dbname + '..sysobjects WHERE type = ''P'' ORDER BY Name'
EXEC (@exec_str)
OPEN script_cursor
FETCH NEXT FROM script_cursor INTO @spname
WHILE (@@fetch_status <> -1)
BEGIN
SET @exec_str = 'Databases("'+ @dbname +'").StoredProcedures("'+RTRIM(UPPER(@spname))+'").Script(74077,"'+ @filename +'")'
EXEC @hr = sp_OAMethod @object, @exec_str, @return OUT
IF @hr <> 0
BEGIN
PRINT 'error Script'
RETURN
END
FETCH NEXT FROM script_cursor INTO @spname
END
CLOSE script_cursor
DEALLOCATE script_cursor
-- Destroy the object
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
PRINT 'error destroy object'
RETURN
END
GO
您是否知道DMO已被SMO取代?据我所知,微软没有停止这项业务的计划。我建议您尝试使用SQL CRL存储过程。请参见从下载SQLServer2005_BC.msi
然后安装DMO,也适用于2008/R2 使用存储过程,您到底想完成什么?为所有存储的进程编写脚本?这是否需要是一个存储过程,或者是否可以使用SQL Server Mgmt Studio Tasks>为数据库生成脚本中的交互功能?是的,它确实需要进行电子存储procedure@marc_s不要把问题和例子混淆起来。问题是什么是DMO的替代品。我正在使用VB脚本中的DMO COM对象。问题是一样的;但另一个例子是,对于64位Windows,您需要下载SQLServer2005_BC_x64.msi