Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用vim解析.sql文件_Sql_Sql Server_Windows_Vim - Fatal编程技术网

在Windows上使用vim解析.sql文件

在Windows上使用vim解析.sql文件,sql,sql-server,windows,vim,Sql,Sql Server,Windows,Vim,我的生成脚本SQL文件(包括各种视图和表的创建命令)对于常规记事本编辑器来说太大。我正在使用vim。但是,每个字符之间都有一个^@。因此,CREATE TABLE如下所示: ^@C^@R^@E^@A^@T^@E^@ ^@T^@A^@B^@L^@E 这正常吗?基本上,这个文件中只有几个我真正想要的CREATE脚本。特别是,我正在寻找任何一行中包含[dbo].[v_agent。我理解grep命令,但我坐在那里等待命令运行,想知道我是否在浪费时间。现代MS Windows程序和实用程序(如SQL S

我的生成脚本SQL文件(包括各种视图和表的创建命令)对于常规记事本编辑器来说太大。我正在使用
vim
。但是,每个字符之间都有一个
^@
。因此,
CREATE TABLE
如下所示:

^@C^@R^@E^@A^@T^@E^@ ^@T^@A^@B^@L^@E

这正常吗?基本上,这个文件中只有几个我真正想要的
CREATE
脚本。特别是,我正在寻找任何一行中包含
[dbo].[v_agent
。我理解
grep
命令,但我坐在那里等待命令运行,想知道我是否在浪费时间。

现代MS Windows程序和实用程序(如SQL Server)使用UTF-16 LE(小端)创建文本文件字符编码

默认情况下,Unix实用程序(如
grep
)不会将此类文件解释为文本文件,而是将其视为二进制文件(字节流)


如果您正在运行Unix仿真器(例如Cygwin),
iconv
工具可能 用于将其转换为不同的编码,如UTF-8,例如

iconv -f utf16le -t utf8 in.sql > out.sql

由于您已经声明在Vim中打开了该文件,因此可以使用以下Vim命令重新打开该文件:

:set encoding=utf8
:e ++encoding=utf16le
第一个命令用于确保可以使用Unicode字符 当文件加载到Vim缓冲区时正确表示。由于默认编码通常设置为UTF-8,因此不需要这样做

Vim不会自动将文件识别为UTF-16LE编码,因此第二个命令会重新打开文件进行编辑;您必须告诉它应该使用哪个字符编码来解释构成文件的字节流。有关更多信息,请参阅


现在文件已正确加载到Vim缓冲区中,您可以将
fileencoding
选项设置为要保存文件的任何字符编码。

现代MS Windows程序和实用程序(如SQL Server)使用UTF-16 LE(小端)字符编码创建文本文件

默认情况下,Unix实用程序(如
grep
)不会将此类文件解释为文本文件,而是将其视为二进制文件(字节流)


如果您正在运行Unix仿真器(例如Cygwin),
iconv
工具可能 用于将其转换为不同的编码,如UTF-8,例如

iconv -f utf16le -t utf8 in.sql > out.sql

由于您已经声明在Vim中打开了该文件,因此可以使用以下Vim命令重新打开该文件:

:set encoding=utf8
:e ++encoding=utf16le
第一个命令用于确保可以使用Unicode字符 当文件加载到Vim缓冲区时正确表示。由于默认编码通常设置为UTF-8,因此不需要这样做

Vim不会自动将文件识别为UTF-16LE编码,因此第二个命令会重新打开文件进行编辑;您必须告诉它应该使用哪个字符编码来解释构成文件的字节流。有关更多信息,请参阅


现在文件已正确加载到Vim缓冲区中,您可以将
fileencoding
选项设置为要保存文件的任何字符编码。

您是如何生成脚本的?有一个ScriptingOptions…选项用于设置输出的编码(),但我没有看到它在SSMS选项中公开。我怀疑该文件是UTF-16,vim期望(或解释)UTF-8。我使用了Tasks->Generate ScriptsI做了一些研究,这似乎是MS的一个长期请求(至少给用户选择不同编码的选项)。您可以尝试使用powershell脚本,在该脚本中可以将ScriptingOptions.Encoding设置为UTF-8。否则,我喜欢下面提供的vim提示。您是如何生成脚本的?有一个ScriptingOptions…选项用于设置输出的编码(),但我没有看到它在SSMS选项中公开。我怀疑该文件是UTF-16,vim期望(或解释)UTF-8。我使用了Tasks->Generate ScriptsI做了一些研究,这似乎是MS的一个长期请求(至少给用户选择不同编码的选项)。您可以尝试使用powershell脚本,在该脚本中可以将ScriptingOptions.Encoding设置为UTF-8。否则,我喜欢下面提供的vim提示。