是否可以从 Sql Server Management Studio 查询制表符分隔的文件以查看其数据而不将其保存在任何地方?
我知道您可以BULK INSERT
使用以下内容从制表符分隔的文件中:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
但是,这需要您提前知道列并创建一个表来保存数据。
我还知道您可以查询其他一些文件类型,例如 CSV 或 Excel,而无需预先使用OPENROWSET
Excel 驱动程序定义列,例如:
-- Query CSV
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;',
'SELECT * FROM MyFile.csv')
-- Query Excel
SELECT *
FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0',
'Excel 8.0;Database=MyFile.xls',
'SELECT * FROM [Sheet1$]')
此外,如果我在 SQL Server 上将注册表项从 from 更改为Format
to HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text
,CSVDelimited
则TabDelimited
上面的 CSV 查询将正确读取制表符分隔的文本文件,但是它将不再读取逗号分隔的文本文件,所以我不认为我想要就这样离开它。
尝试在中使用Format=TabDelimited
也OPENROWSET
不起作用
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited',
'SELECT * FROM MyFile.txt')
我已经尝试将Text
注册表项从Engines
和ISAM Formats
键复制到默认为 的自定义项TabDelimited
,但是它仍在读取文件CSVFormat
而不是TabDelimited
格式,所以我必须在这里遗漏一些东西。
有没有办法查询制表符分隔的文件以查看其内容而无需创建表和BULK INSERT
它?
我正在使用 SQL Server 2005
您必须在与您打开的文本文件相同的目录中创建一个包含分隔符的 schema.ini 文件。这是基于每个文件覆盖注册表值的唯一方法。请参阅MSDN上的文件格式文档。例子:
在 C:\Text\schema.ini 中:
如果需要经常重复此活动,我建议使用脚本来创建 schema.ini。多个文件可以在同一个 schema.ini 中引用,或者单独的 schema.ini 可以包含在其自己目录中的每个文本文件中。
可能是SSMS: How to import (Copy/Paste) data from excel可以提供帮助(如果您不想使用
OPENROWSET
或没有权限)。