我有一个大的SQL文件,不适合内存,需要针对Microsoft SQL Server 2008执行。sqlcmd.exe
工具似乎总是首先将其加载到内存中,在这种情况下是不可能的。有什么想法吗?
不幸的是,我无法拆分脚本,因为它是由Red Gate出色的SQL数据比较生成的。整个脚本是一个大事务,我想保持这种方式。我从未想过拥有一个巨大的脚本是不寻常的,因为在数据库世界中拥有大量数据是很常见的。该脚本的大小为3GB。
答案 0 :(得分:3)
RedGate的SQL Compare有一个直接执行语句的选项,而不是生成SQL脚本并在以后执行它。有没有理由不行 - 换句话说,是否有理由需要SQL脚本并且无法使用应用程序的“立即同步”功能?
答案 1 :(得分:1)
创建SQL脚本的人是谁?获取创建文件的任何内容,通过事务或语句将脚本拆分为逻辑块(取决于文件的结构)。如果源无法执行此操作,则启动脚本以逻辑方式拆分文件。
答案 2 :(得分:1)
如果它太大,脚本要么太复杂要么重复。在任何一种情况下,正如其他人所建议的那样,唯一明智的做法是将其分解为可管理的块。
这是一次性演习还是常规演出?
答案 3 :(得分:1)
在脚本有一个与OpenXML一起使用的巨大XML String之前,我遇到过这个问题。实际的SQL相当小,更新了表中的一些值。
我最终将数据(以块为单位)插入到临时表中,直到存储了XML中的所有信息。然后我运行了我的更新声明。
在发布更多数据后稍后添加:
您可能希望在工具中选择大块,并让SQL Data compare以块的形式生成脚本。这样你就得到了交易。您只需突出显示一个范围并点击空格键即可选择较大的部分。
答案 4 :(得分:1)
答案 5 :(得分:0)
1-800-展鹏支持.....
或
答案 6 :(得分:0)
USE sqlcmd命令
示例sqlcmd -S myServer \ instanceName -i C:\ myScript.sql
答案 7 :(得分:0)
我理解它的方式,SSMS是32位,因此无法加载超过1.5-2 GB的脚本。您可以在SQLCMD.exe中运行该脚本,但由于事务大小,您可能会遇到问题 - SqlCmd会将整个事务保留在内存中。那么你在SQL数据比较中可以做的就是进入选项并使用“拆分事务”,这可能有所帮助。
SQL Data Compare还将对BLOB进行部分更新,这将解决“巨大的BLOB”问题。
这当然是基于最新版本的Data Compare。某些版本可能没有这些功能。
另一个选项可能是使用SQL Compare为文件夹创建架构脚本,然后使用SDC将数据同步到该文件夹。然后,每个表都有一个文件,而不是一个大文件。
希望这有帮助。