2010-05-20 5 views
1

Auparavant, j'utilisais SQL-DMO pour générer automatiquement des scripts à partir de la base de données. Maintenant, j'ai mis à niveau vers SQL Server 2008 et je ne veux plus utiliser cette fonctionnalité puisque Microsoft supprimera cette fonctionnalité.SQL Server 2008 alternative pour SQL-DMO

Existe-t-il une autre alternative que je peux utiliser pour me connecter à un serveur et générer des scripts automatiquement à partir d'une base de données?

Toute réponse est la bienvenue. Merci d'avance.

Ceci est la procédure que j'utilisais précédemment:

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 
+0

Qu'essayez-vous exactement d'accomplir avec le proc stocké? Script sur tous les procs stockés? Est-ce que cela doit être un proc stocké, ou pouvez-vous utiliser une fonctionnalité interactive dans SQL Server Mgmt Studio (Tâches> Générer des scripts pour la base de données) –

+0

oui il doit être e procédure stockée – user345929

+0

@marc_s Ne confondez pas la question avec l'exemple. La question est de savoir quel est le remplacement de DMO. J'utilise des objets COM DMO de VB Script. La question est la même. mais un exemple différent. –

Répondre

1

Savez-vous que DMO a été remplacé par SMO? Microsoft n'a pas l'intention de mettre fin à cela, que je sache.