日期:2014-05-18  浏览次数:20510 次

如何通过命令行方式导出数据库的sql脚本
不找第三方工具,系统自带的 sql server managerment studio来导出。
ssms提供了一个脚本向导的窗口来进行导出,但每次都需要开ssms,而且还要一步一步的点next,所以想找看有没有命令行的方式实现这个功能。

------解决方案--------------------
建库脚本? 没找到好办法
------解决方案--------------------
貌似没有命令方式导出脚本的. 问题是,楼主为何会有这种需求?
难道经常需要导出建库脚本吗,库结构很经常变更吗.
------解决方案--------------------
参考:
SQL code
生成2005数据库结构脚本
http://topic.csdn.net/u/20100504/09/19616cd8-ebaf-4a89-8383-5a7a95d81a0c.html?74663

--以下生成整个数据库的SQL脚本,我测试了,相当好用。   
  --(scptxfr.exe的路径要正确以下是我的路径)   
  declare   @cMd   varchar(1000)   
  set   @cmd   =   'master.dbo.xp_cmdshell   '   +     
  '''c:\"Microsoft   '   +   
  'SQL   Server"'   +   
  '\MSSQL\Upgrade\scptxfr.exe   '   +   
  '   /s   YourServerName   /p   YourSAPassword   /I   /d   YourDBName   /f   '   +   
  'c:\YourDBName.sql'''   
  exec   (@cmd)   
    
    
  工具参数说明:   
    
  命令行语法:   
  SCPTXFR   /s   <服务器>   /d   <数据库>   {[/I]   |   [/P   <密码>]}   
                  {[/F   <脚本文件目录>]   |   [/f   <单个脚本文件>]}   
                  /q   /r   /O   /T   /A   /E   /C   <CodePage>   /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   服务器有效)。

------解决方案--------------------
探讨

参考:
SQL code
生成2005数据库结构脚本
http://topic.csdn.net/u/20100504/09/19616cd8-ebaf-4a89-8383-5a7a95d81a0c.html?74663

--以下生成整个数据库的SQL脚本,我测试了,相当好用。
--(scptxfr.exe的路径要正确以下是我的路径)
declare @cMd ……

------解决方案--------------------
使用 vbs 脚本访问 Microsoft.SqlServer.Management.Smo.Scripter 组件就可以实现了。

------解决方案--------------------
下面的脚本保存为C:\DBAScripts\Script-Db.ps1
SQL code

param
(
[string] $SQLServername,
[string] $Databasename,
[string] $filepath
)
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
$MyScripter=New-Object ("Microsoft.SqlServer.Management.Smo.Scripter")
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" $SQLServername
$MyScripter.Server=$srv
$scrcontent=$MyScripter.Script($srv.databases["$Databasename"])
$date=Get-Date
$suffix="_"+$date.year.tostring()+"_"+$date.month.tostring()+"_"
+$date.day.tostring()
$filepath=$filepath+$databasename+"_db_"+$suffix+".sql"
$scrcontent2="use [master