前段时间公司要开始对数据库的对象进行版本控制,因此经常需要将数据库里的SP、Table的脚本导出到以对象名命名的文件里,如果通过企业管理器来做的话,光是找到这些SP就够麻烦的了,导出来的文件名还不是标准格式,非常的麻烦。
因此就想到用SQLDMO来写一个脚本,来实现上面的功能。
脚本代码如下:
Option
Explicit
Dim
dmoServer
Dim
dmoDB
Dim
dmoSP
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Dim
FSO
Dim
strFolder
Dim
strFile
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Dim
strNames
'
需要生成脚本的SP的名称列表,为空生成所有的SP的脚本(所有的名称都以"|"结束)
strNames
=
"
|sp_a|sp_b|
"
'
strNames = ""
Dim
strDBs_NO
'
不需要生成脚本的数据库列表
strDBs_NO
=
"
|master|msdb|tempdb|Northwind|pubs|models|
"
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Dim
strDBs
'
需要生成脚本的数据库列表,为空则生成除strDBs_NO包含的数据库外的其他数据库的脚本
strDBs
=
"
|UserDB|
"
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Const
SQLDMOScript_DRI_PrimaryKey
=
268435456
Const
SQLDMOScript_DRI_ForeignKeys
=
134217728
Const
SQLDMOScript_OwnerQualify
=
262144
Const
SQLDMOScript_IncludeHeaders
=
131072
Const
SQLDMOScript_NoDRI
=
512
Const
SQLDMOScript_AppendToFile
=
256
Const
SQLDMOScript_Default
=
4
Const
SQLDMOScript_Drops
=
1
Const
SQLDMOScript_ToFileOnly
=
64
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Set
dmoServer
=
CreateObject
(
"
SQLDMO.SQLServer
"
)
Set
FSO
=
CreateObject
(
"
Scripting.FileSystemObject
"
)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
dmoServer.LoginSecure
=
False
dmoServer.Connect
"
ServerName_here
"
,
"
uid_here
"
,
"
pwd_here
"
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
For
Each
dmoDB In dmoServer.Databases
strFolder
=
"
StoreFolder_here
"
&
dmoDB.Name
If
(
Instr
(
1
,strDBs_NO,
"
|
"
+
dmoDB.Name
+
"
|
"
)
=
0
or
strDBs_NO
=
""
)
And
(
Instr
(
1
,strDBs,
"
|
"
+
dmoDB.Name
+
"
|
"
)
>
0
or
strDBs
=
""
)
Then
If
Not
FSO.FolderExists(strFolder)
Then
FSO.CreateFolder(strFolder)
End
If
For
Each
dmoSP In dmoDB.StoredProcedures
If
Not
dmoSP.SystemObject
And
(
Instr
(
1
,
"
|
"
+
strNames,dmoSP.Name
+
"
|
"
)
>
0
or
strNames
=
""
)
Then
strFile
=
strFolder
&
"
"
&
dmoSP.Name
&
"
.sql
"
'
dmoSP.Script SQLDMOScript_IncludeHeaders + SQLDMOScript_ToFileOnly + SQLDMOScript_Drops + SQLDMOScript_Default , strFile '选项可以根据需要增删,具体可参见前面定义的Const
dmoSP.Script SQLDMOScript_IncludeHeaders
+
SQLDMOScript_ToFileOnly
+
SQLDMOScript_Default , strFile
End
If
Next
End
If
Next
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Set
dmoSP
=
Nothing
Set
dmoDB
=
Nothing
Set
dmoServer
=
Nothing
有了这脚本以后,不管是抓整个数据库里所有SP的脚本,还是指定的几个SP的脚本,都变得非常的简单了。
注:表的脚本只要稍做修改就可以。(dmoDB.StoredProcedures改成Tables)