Sql-Server-2005

我可以從 SSMS 查詢製表符分隔的文件嗎?

  • April 9, 2020

是否可以從 Sql Server Management Studio 查詢製表符分隔的文件以查看其數據而不將其保存在任何地方?

我知道您可以BULK INSERT使用以下內容從製表符分隔的文件中:

BULK INSERT SomeTable
FROM 'MyFile.txt'
WITH (
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n');

但是,這需要您提前知道列並創建一個表來保存數據。

我也知道您可以查詢其他一些文件類型,例如 CSV 或 Excel,而無需預先使用OPENROWSETExcel 驅動程序定義列,例如:

-- 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 上將系統資料庫項更改為Formatfrom HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\TextCSVDelimited上面TabDelimited的 CSV 查詢將正確讀取製表符分隔的文本文件,但是它將不再讀取逗號分隔的文本文件,所以我不認為我想要就這樣離開它。

嘗試在中使用Format=TabDelimitedOPENROWSET不起作用

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
   'Text;Database=\\Server\Folder\;HDR=Yes;Format=TabDelimited', 
   'SELECT * FROM MyFile.txt')

我已經嘗試將Text系統資料庫項從EnginesISAM Formats鍵複製到預設為 的自定義項TabDelimited,但是它仍在讀取文件CSVFormat而不是TabDelimited格式,所以我必須在這裡遺漏一些東西。

有沒有辦法查詢製表符分隔的文件以查看其內容而無需創建表和BULK INSERT它?

我正在使用 SQL Server 2005

您必須在與您打開的文本文件相同的目錄中創建一個包含分隔符的 schema.ini 文件。這是基於每個文件覆蓋系統資料庫值的唯一方法。請參閱MSDN上的文件格式文件。例子:

SELECT * 
FROM OPENROWSET(
   'Microsoft.ACE.OLEDB.12.0', 
   'Text; HDR=YES; Database=C:\Text', 
   'SELECT * FROM testupload2.txt')

在 C:\Text\schema.ini 中:

[testupload2.txt]
ColNameHeader=True
Format=TabDelimited
MaxScanRows=0

如果需要經常重複此活動,我建議使用腳本來創建 schema.ini。多個文件可以在同一個 schema.ini 中引用,或者單獨的 schema.ini 可以包含在其自己目錄中的每個文本文件中。

引用自:https://dba.stackexchange.com/questions/29306