在查詢分析器中,通過SQLDMO來得到腳本

--用以下腳本,可以得到任意對象的創建時的腳本,網上好像也流傳有,但屬於自己的東西用着還是感覺舒坦.
--增加快捷鍵後,然後在查詢分析器中按相應的快捷鍵就能顯示對象的腳本.
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

 

 

ALTER    procedure sp_script
        @objectname varchar(50)
as
declare @databasename varchar(50)

set @databasename = DB_NAME(DB_ID())

declare        @str varchar(4000)


DECLARE @object int
declare @objectdatabase int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
DECLARE @DataBaseCount int, @Current int, @DataBase int

declare @table int, @tables int

EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
IF @hr <> 0
BEGIN
     EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

EXEC @hr = sp_OAMethod @object, 'Connect', NULL, @@servername,
    'sa', ''

IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

EXEC @hr = sp_OAGetProperty @object, 'Databases', @objectdatabase output

IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @objectdatabase, @src OUT, @desc OUT
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

 

EXEC @hr = sp_OAGetProperty @objectdatabase, 'count', @DataBaseCount output
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @objectdatabase, @src OUT, @desc OUT
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END


set @Current = 1
loop1:

  EXEC @hr = sp_OAMethod @objectdatabase, 'Item', @Database output, @databasename

  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @objectdatabase
     RETURN
  END


EXEC @hr = sp_OAMethod @Database, 'GetObjectByName', @table output, @objectname

  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @Database
     RETURN
  END

Exec @hr = sp_OAMethod @table, 'Script', @str output, 5
  IF @hr <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @table
     RETURN
  END


print @str

 

 


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章