在SQL Server Management Studio中,可以选择“生成脚本”。我们当前将2008 sql服务器数据库传输到2005 sql server数据库的方式是生成脚本并在该sql脚本文件上运行SQLCMD以推送到2005 sql server的本地实例。我创建了一个C#程序来完成其他一些任务,但我也需要它来转换2008数据库并将其移动到2005 sql服务器。是否有Transact sql语句或将2008数据库转换为2005数据库的更简单方法?谢谢。生成等效于Transact SQL的脚本
回答
您的开发交付物不应该是数据库二进制文件(.MDF文件),而应该是部署脚本。你像对待任何其他源文件一样对待你的数据库部署和升级,将它置于源代码控制之下,在检入时有同行代码评论等等。直接修改.MDF,然后进行逆向工程来部署它就是非常糟糕。您现在遇到的问题只是其中一个问题,还有更多问题,特别是在应用程序版本升级期间完成的问题模式更改。见Version Control and your Database。
现在的确如此,整个VS工具集正在试图引导您沿着'在VS数据库浏览器中编辑您的MDF并且一切都会好的'路径。没有什么会好起来的,一个或多个部署崩溃在你的生活中遥遥领先,但让我们假装VS会做一件好事。
您可以通过第三方商业工具(如Red Gate的SQL Compare)自动提取当前模式并对其进行部署,或者您可以非常容易地自行生成“生成脚本”。 SSMS所做的就是调用SMO脚本功能来编写整个数据库。你可以这样做:实例化一个对象实例,然后添加你想要脚本的对象,然后提取T-SQL生成的脚本。那就是究竟是 SSMS中的'生成脚本'是什么。没有为scripting在MSDN的例子:
//Connect to the local, default instance of SQL Server.
Server srv = new Server();
//Reference the AdventureWorks2008R2 database.
Database db = srv.Databases["AdventureWorks2008R2"];
//Define a Scripter object and set the required scripting options.
Scripter scrp = new Scripter(srv);
scrp.Options.ScriptDrops = false;
scrp.Options.WithDependencies = true;
//Iterate through the tables in database and script each one. Display the script.
//Note that the StringCollection type needs the System.Collections.Specialized namespace to be included.
Microsoft.SqlServer.Management.Sdk.Sfc.Urn[] smoObjects = new Microsoft.SqlServer.Management.Sdk.Sfc.Urn[1] ;
foreach (Table tb in db.Tables) {
smoObjects[0] = tb.Urn;
if (tb.IsSystemObject == false) {
System.Collections.Specialized.StringCollection sc;
sc = scrp.Script(smoObjects);
foreach (string st in sc) {
Console.WriteLine(st);
}
}
}
Remus,谢谢你的回复。你的回复使我更多地搜索了我以前不知道的课程。我遇到了Transfer类,它完全按照我希望的方式进行操作(有了它,我不必写一个sql脚本并调用SQLCMD!),但它不会执行一件我需要的操作:它不会执行任何操作: t复制所有的约束(只是数据)。所以所有的FK,PK和IX都不见了。你知道我会如何转移这些吗?我找不到让这些人转移的选项?谢谢! – dangerisgo 2010-12-18 20:56:36
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b5219a28-64c2-462b-a263-66ae9cc9c45c/这也有帮助。谢啦! – dangerisgo 2010-12-18 21:45:56
从一个数据库导入在其他
我不完全确定你的意思。 – dangerisgo 2010-12-18 00:01:29
转到2005 Server Management Studio控制台,右键单击您的Db并选择任务>导入数据。从SQL 2008 Server导入数据并按照向导进行操作。保存包。那就是你的代码。运行也为填充 – renegm 2010-12-18 00:45:21
2005年SQL服务器是一个Express版本和2008年sql服务器是完整版本,但我不能保存该软件包。我甚至做过2008年 - > 2008年,但仍然无法保存包裹。 – dangerisgo 2010-12-18 00:54:10
脚本编写数据库对象出来,然后上了年纪的实例中运行它们是要走的路。如果您编码了SQL 2008的特定功能,那么在2005年运行脚本时,您会发现它很正确(在使用Production之前进行测试!)。
设置兼容模式将不是帮助这里。如果我有一个(2008)声明的表类型,并将其与存储过程参数一起使用,那么SQL或其他任何人都可以将其迁移到2005年。使用“现代”系统来支持旧版系统最多也不过分。
只是因为我做一遍,我的首选迁移路径是:
- 有发展,‘分期’和生产环境,都在2005年
- 升级升级到2008
- 继续在dev/2005上进行开发,并将更改推向舞台(2008)和制作(2005)。当它在2008年运行时(几乎肯定会),管理层将满足于升级生产。而你的2005年版本仍将在2005年的产品上运行。
- 升级生产。嘿,它工作在升级,所以
- 而从产生的一切(2005)开发适用于(2008年)分期和生产
- 才把你升级发展,并与您的新玩具 发挥它的安全和稳健
这与我们所做的相似。一切从2005年开始。然后开发到2008年,生产停留在2005年。一旦我们的数据库已经足够完善并准备就绪,产量将延续到2008年。问题是我们必须支持将会有2005年的遗留系统,所以我们可以不会打破这些。我每次生产版本都会生成脚本,并且效果很好。问题是我正在编写这个自动化程序,所以没有管理工作室的交互,这样任何人都可以运行它并从2008服务器上获取2005 bak文件。 – dangerisgo 2010-12-18 00:25:56
- 1. golang mongodb中的Transact-SQL等效集合
- 2. 等效于Document.Write()的脚本
- 3. 生成SQL脚本
- 4. SQL脚本生成SQL脚本
- 5. EF4生成无效脚本
- 6. 用于为表格生成脚本的SQL服务器脚本
- 7. 创建有效的SQL脚本以生成SQL Server数据库
- 8. 等效于Java MessageDigest的Shell脚本
- 9. SQL Server生成脚本
- 10. 从表生成sql脚本
- 11. C#等效于boost :: gregorian生成器
- 12. 在Transact-SQL中是否有与typedef等效的功能?
- 13. Angular.js等价于`rails生成脚手架?
- 14. 如何改进sql server 2005的这个transact-sql脚本?
- 15. 对于SQL的LINQ等效
- 16. 由PowerDesigner生成的sql server脚本
- 17. 生成触发器的SQL脚本
- 18. 使用约束时,MS SQL Server 2008脚本生成会创建无效脚本
- 19. 以有效方式生成动态SQL过滤器脚本
- 20. IN等于odata的SQL等效
- 21. 关于“脚本生成”的新手
- 22. Oracle SQL脚本中基于条件的假脱机生成
- 23. 快速生成基于sql 2008数据库的ascii文本sql脚本
- 24. 生成脚本
- 25. Maya MEL脚本sprintf等效
- 26. 哪个Transact-SQL查询最有效?
- 27. Oracle SQL%ROWCOUNT等效于DBMS_PARALLEL_EXECUTE
- 28. LINQ等效于SQL BETWEEN
- 29. #define等效于Oracle SQL?
- 30. LINQ/Lambda等效于SQL
一个问题:为什么弹簧介意... – 2010-12-17 23:35:30
及其对我国的传统系统的支持。 – dangerisgo 2010-12-17 23:58:49
如果你支持2005年,你为什么在2008年发展,这种方式是疯狂的。迟早你会使用一些2005年无法识别的代码,并发现当你移动prod是一个非常糟糕的时间。开发新版本比开发非常危险。 – HLGEM 2010-12-20 14:37:08