2010-03-12 31 views
3

我有一个“稍微”大的SQL脚本保存为文本文件。它总计为8.92GB,所以它有点像野兽。编辑一个9GB的.sql文件

我必须做一些搜索并替换这个文件(具体地说,将所有的NOT NULL改为NULL,所以所有的字段都可以为空),然后执行这个恶梦的事情。有没有人有任何建议可以做到这一点的文本编辑器?

我可以看到解决问题的另一种方法是编写一个程序,它读取一个块,对我需要的东西进行替换,然后将其保存到一个新文件中,但我宁愿使用一些标准的做法。

它也没有解决在SQL Server Management Studio来执行该死的东西打开了野兽的问题...

任何想法?

感谢, 埃里克

+2

您可以使用SQL Server BCP命令行实用程序来执行的块该文件,你不可能在SQL管理器中加载所有的东西。在我的系统上,bcp.exe位于C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \中。 – sipwiz 2010-03-12 10:48:41

回答

6

sed专为这种工作而设计。

sed -e 's/\(NOT\)\? NULL/ NOT NULL/g' <input.sql> output.sql 

sedavailable on Windows

编辑:我修改了我的声明,以避免当输入已经包含NOT NULL时产生NOT NOT NULL

+0

完美(除了我想将NOT NULL更改为NULL,而不是其他方式)。谢谢! – 2010-03-12 11:52:55

+0

有趣的是,oracle导出文件也是一个流格式(即使它们是二进制文件),所以你可以使用sed来对它们执行搜索/替换操作。 – ConcernedOfTunbridgeWells 2010-03-12 12:31:38

+0

@CEROQ:哎呀,我的坏。但其他方式更容易,所以我会保持原样。 – 2010-03-12 12:32:50

0

您可以使用,而不是将它们映射加载到内存中的文件的编辑器。像UltraEdit或Notepad ++,我相信还有更多。

这仍然很慢,但功能非常强大。

1

使用sed或简单地perl -pne 's/foo/bar/' file.sql > newfile.sql(foo将被替换为小节)。

对于装载SQL,使用OSQL.EXE应该是在c的地方:\ Program Files文件... \ SQL服务器\ BIN

0

你应该考虑用perl。它进行了原地文本替换。使用它作为

perl -pie "s/ NOT NULL/ NULL/g" hugefile.sql 
0

小心那个斧头尤金......你不想影响任何WHERE子句应该保持NOT NULL