在SQL Server 2000 企业管理器里选中数据库,按鼠标右键,选[生成SQL脚本],
点[全部显示]按钮后会出现[编写全部数据对象脚本],如下图:
点[确定]按钮后,会出现一个[另存为]窗口,
选择将要生成文件的目录及文件名,点[保存]按钮后,
出现[正在编写脚本]和[脚本编写完成]的小窗口,按[确定]按钮结束。
如果数据库很多,这样用图形的方式来生成数据库所有对象的脚本就很麻烦了。上个月我在
www.sqlservercentral.com看到一篇
文章:
里面提到直接调用SQL Server 2000的DOS下应用程序scptxfr.exe,就可以生成数据库下所有对象的脚本。
经过使用和测试,发现那里面介绍的方法有一些错误:
例如服务器被改名称了以后,还用@@Servername就不对了,
master库下也可能会生成一些公用存储过程,最好也把相关的对象脚本定期保存出来。
下面是我修改了后,生成DOS命令的SQL:
-- 用windwos认证方式生成调用DOS下应用程序scptxfr.exe的脚本:
declare @server_name nvarchar(30) |
select top 1 @server_name=originating_server from msdb.dbo.sysjobs |
select @server_name |
select '"D:\Microsoft SQL Server\MSSQL\Upgrade\scptxfr.exe" /I /s '+@server_name+' /d ' + name + ' /f F:\yu\db_scripts\3\'+@server_name+'_' + name + '.sql /r /O /Y /G ' from master.dbo.sysdatabases where name not in ('tempdb', 'model', 'pubs', 'northwind', 'msdb') |
如果你们DOS下应用程序scptxfr.exe不在D:\Microsoft SQL Server\MSSQL\Upgrade目录,需要修改盘符和目录名;F:\yu\db_scripts\3\目录是我举例子用的目录,你们实际用的时候也要修改。我们把[SQL查询分析器]结果栏里面生成的SQL语句保存到一个gen_db_scripts.bat批处理文件里。
最后在DOS下执行这个gen_db_scripts.bat就可以完成全部数据库脚本的生成。
-- 用sa加密码方式生成调用DOS下应用程序scptxfr.exe的脚本:
declare @server_name nvarchar(30) |
select top 1 @server_name=originating_server from msdb.dbo.sysjobs |
select @server_name |
select '"D:\Microsoft SQL Server\MSSQL\Upgrade\scptxfr.exe" /P password /s '+@server_name+' /d ' + name + ' /f F:\yu\db_scripts\2\'+@server_name+'_' + name + '.sql /r /O /Y /G ' from master.dbo.sysdatabases where name not in ('tempdb', 'model', 'pubs', 'northwind', 'msdb') |
以下是在DOS下scptxfr/? 看帮助,得到的参数提示信息:SCPTXFR /s <服务器> /d <数据库> {[/I] | [/P <密码>]}
{[/F <脚本文件目录>] | [/f <单个脚本文件>]}
/q /r /O /T /A /E /C
/N /X /H /G /Y /?
/s — 指示要连接到的源服务器。
/d — 指示要为之编写脚本的源数据库。
/I — 使用集成安全性。
/P — sa 要用的密码。请注意登录 ID 始终为 sa。
若/P不使用或标志后面没有密码,
则将使用空密码。不与 /I 兼容。
/F — 脚本文件应生成到的目录。
这意味着为每个对象分类生成一个文件。
/f — 所有脚本将保存到的单个文件。
不与 /F 兼容。
/q — 在所生成的脚本中使用被引用的标识符。
/r — 为脚本中的对象包括 drop 语句。
/O — 生成 OEM 脚本文件。无法用于 /A 或 /T。
这是默认的行为。
/T — 生成 UNICODE 脚本文件。无法用于 /A 或 /O。
/A — 生成 ANSI 脚本文件。无法用于 /T 或 /O。
/? — 命令行帮助。
/E — 发生错误时停止脚本编写。
默认行为是记录该错误而后继续。
/C — 指示替代服务器 CodePage(代码页)的 CodePage。
/N — 生成 ANSI PADDING。
/X — 编写 SP 和 XP 脚本以分隔文件。
/H — 生成不带首部的脚本文件。(默认: 带首部)。
/G — 使用指定的服务器名称作为所生成的输出文件的前缀(以处理服务器名称
中的划线)。
/Y — 为“扩展属性”生成脚本(仅对 8.x 服务器有效)。