Tôi có thể truy vấn tệp được phân định bằng tab từ SSMS không?


14

Có thể truy vấn một tệp được phân định bằng tab từ Sql Server Management Studio để xem dữ liệu của nó mà không lưu nó ở bất cứ đâu không?

Tôi biết bạn có thể BULK INSERTtừ một tệp được phân định bằng tab bằng cách sử dụng một cái gì đó như:

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

tuy nhiên, điều đó đòi hỏi bạn phải biết trước các cột và tạo một bảng để chứa dữ liệu.

Tôi cũng biết bạn có thể truy vấn một số loại tệp khác như CSV hoặc Excel mà không cần xác định trước các cột bằng cách sử dụng OPENROWSETvà trình điều khiển Excel, chẳng hạn như:

-- 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$]')

Ngoài ra, nếu tôi thay đổi các khóa registry Formatdưới HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Texttừ CSVDelimitedđể TabDelimitedtrên SQL Server, truy vấn CSV trên sẽ đọc một cách chính xác một file văn bản tab-delimited, tuy nhiên nó sẽ không còn đọc một file văn bản dấu phẩy phân cách vì vậy tôi không nghĩ rằng tôi muốn để nó như thế

Cố gắng sử dụng Format=TabDelimitedtrong OPENROWSETcũng không hoạt động

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

Tôi đã thực hiện một số nỗ lực để sao chép các Textkhóa đăng ký từ cả khóa EnginesISAM Formatskhóa sang thứ gì đó tùy chỉnh mặc định TabDelimited, tuy nhiên nó vẫn đang đọc các tệp CSVFormatthay vì TabDelimitedđịnh dạng nên tôi phải thiếu một cái gì đó ở đây.

Có cách nào để truy vấn một tệp được phân định bằng tab để xem nội dung của nó mà không phải tạo bảng và BULK INSERTnó không?

Tôi đang sử dụng SQL Server 2005


Có thể chấp nhận sử dụng bảng tạm thời được tạo động được xóa sau khi sử dụng không?
jcolebrand

Câu hỏi thứ hai: bạn đã thử sử dụng trình điều khiển Excel để chỉ mở TDF chưa? Đôi khi Excel thật kỳ diệu.
jcolebrand

@jcolebrand Có Tôi có thể sử dụng bảng tạm thời, tuy nhiên danh sách cột khá dài và có thể thay đổi, vì vậy tôi chỉ có thể chỉ định các cột tôi quan tâm thay vì phải viết ra định nghĩa cho tất cả các cột và nhớ cập nhật chúng bất cứ khi nào các cột không cần thiết thay đổi.
Rachel

@jcolebrand Tôi chưa từng thử dùng trình điều khiển excel, mặc dù hiện tại nó không có triển vọng. Phần mở rộng tệp thực sự .bakkhông phải là phần mở rộng tệp được phân tách thông thường và lỗi mà tôi đã gặp trong lần thử đầu tiên là Could not find installable ISAMdo đó tôi không nghĩ rằng nó sẽ hoạt động.
Rachel

2
Cá nhân tôi sẽ phân tích danh sách cột một cách nhanh chóng từ tệp mỗi lần (chỉ cần thực hiện một tab đếm trong dòng đầu tiên của tệp) thay vì cố gắng theo kịp số lượng cột cần để nhập, do đó, bảng tạm thời được tạo động . Không bao giờ mã cứng những gì bạn có thể đảo ngược kỹ sư từ dữ liệu, theo ý kiến ​​của tôi.
jcolebrand

Câu trả lời:


13

Bạn phải tạo một tệp giản đồ chứa tệp phân cách trong cùng thư mục với tệp văn bản bạn đang mở. Đây là cách duy nhất để ghi đè các giá trị đăng ký trên cơ sở mỗi tệp. Xem tài liệu định dạng tệp trên MSDN . Thí dụ:

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

Trong C: \ Text \ lược đồ.ini:

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

Nếu hoạt động này cần phải được lặp lại thường xuyên, tôi sẽ đề xuất một tập lệnh để tạo lược đồ.ini. Nhiều tệp có thể được tham chiếu trong cùng một lược đồ.ini hoặc một lược đồ riêng biệt có thể được bao gồm với mỗi tệp văn bản trong thư mục riêng của nó.


Cảm ơn rât nhiều! Tôi đã thấy gợi ý về việc sử dụng tệp giản đồ.ini, tuy nhiên tôi gặp khó khăn khi tìm cách tự thực hiện một tệp
Rachel

Tôi biết đây là một bài viết cũ nhưng tôi chỉ cần nói "Công việc tốt" @dartonw.
Jeff Moden
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.