日期:2014-05-18 浏览次数:20790 次
生成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   服务器有效)。
------解决方案--------------------
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