Rac*_*hel 14 sql-server-2005 csv
是否可以从 Sql Server Management Studio 查询制表符分隔的文件以查看其数据而不将其保存在任何地方?
我知道您可以使用以下内容BULK INSERT
从制表符分隔的文件中:
BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');
Run Code Online (Sandbox Code Playgroud)
但是,这需要您提前知道列并创建一个表来保存数据。
我也知道您可以查询其他一些文件类型,例如 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$]')
Run Code Online (Sandbox Code Playgroud)
另外,如果我更改注册表项Format
下HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Text
从CSVDelimited
到TabDelimited
SQL Server上,上面的CSV查询将正确读取制表符分隔的文本文件,但是它将不再读取逗号分隔的文本文件,所以我不认为我想就这样离开它。
尝试使用Format=TabDelimited
中OPENROWSET
也不起作用
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited',
'SELECT * FROM MyFile.txt')
Run Code Online (Sandbox Code Playgroud)
我已经尝试将Text
注册表项从Engines
和ISAM Formats
键复制到默认为 的自定义内容TabDelimited
,但是它仍在读取文件CSVFormat
而不是TabDelimited
格式,所以我一定在这里遗漏了一些东西。
有没有办法查询制表符分隔的文件以查看其内容而无需创建表和BULK INSERT
它?
我正在使用 SQL Server 2005
dar*_*onw 14
您必须在与您打开的文本文件相同的目录中创建一个包含分隔符的 schema.ini 文件。这是基于每个文件覆盖注册表值的唯一方法。请参阅MSDN上的文件格式文档。例子:
SELECT *
FROM OPENROWSET(
'Microsoft.ACE.OLEDB.12.0',
'Text; HDR=YES; Database=C:\Text',
'SELECT * FROM testupload2.txt')
Run Code Online (Sandbox Code Playgroud)
在 C:\Text\schema.ini 中:
[testupload2.txt]
ColNameHeader=True
Format=TabDelimited
MaxScanRows=0
Run Code Online (Sandbox Code Playgroud)
如果此活动需要频繁重复,我建议使用脚本来创建 schema.ini。可以在同一个 schema.ini 中引用多个文件,也可以将单独的 schema.ini 与每个文本文件包含在其自己的目录中。