क्या मैं SSMS की एक टैब-सीमांकित फ़ाइल को क्वेरी कर सकता हूं?


14

क्या Sql Server Management Studio की टैब-सीमांकित फ़ाइल को क्वेरी करना संभव है, इसके डेटा को कहीं भी सहेजे बिना देखने के लिए?

मुझे पता है कि आप BULK INSERTटैब-सीमांकित फ़ाइल से कुछ का उपयोग कर सकते हैं:

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

हालाँकि इसके लिए आपको कॉलम को पहले से जानना होगा और डेटा को होल्ड करने के लिए एक टेबल बनाना होगा।

मुझे यह भी पता है कि आप कुछ अन्य फ़ाइल प्रकारों जैसे कि सीएसवी या एक्सेल का उपयोग किए बिना कॉलम को परिभाषित करने OPENROWSETऔर एक्सेल ड्राइवरों को क्वेरी कर सकते हैं , जैसे:

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

इसके अलावा, अगर मैं रजिस्ट्री कुंजी को बदलने Formatके तहत HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Textसे CSVDelimitedकरने के लिए TabDelimitedSQL सर्वर पर, ऊपर सीएसवी क्वेरी सही ढंग से टैब-सीमांकित पाठ फ़ाइल पढ़ा जाएगा, लेकिन यह अब एक अल्प विराम द्वारा सीमांकित पाठ फ़ाइल पढ़ा जाएगा तो मुझे नहीं लगता कि मैं चाहता हूँ इसे ऐसे ही छोड़ देना।

उपयोग करने के लिए प्रयास कर रहा है 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 का उपयोग कर रहा हूं


क्या यह गतिशील रूप से निर्मित टेम्प टेबल का उपयोग करने के लिए स्वीकार्य है जो उपयोग के बाद फ्लश हो जाता है?
jcolebrand

दूसरा सवाल: क्या आपने एक्सेल ड्राइवरों का उपयोग करके सिर्फ टीडीएफ खोलने की कोशिश की है? कभी-कभी एक्सेल जादुई होता है।
jcolebrand

@jcolebrand हां मैं अस्थायी तालिकाओं का उपयोग कर सकता हूं, हालांकि स्तंभ सूची काफी लंबी है और इसमें बदलाव हो सकता है, इसलिए मैं केवल उन कॉलमों को निर्दिष्ट करने में सक्षम होऊंगा जिनके बारे में मुझे उन सभी के लिए परिभाषा लिखने के बजाय दिलचस्पी है। , और याद रखना उन्हें अद्यतन करने के लिए कभी भी अनावश्यक कॉलम बदल जाते हैं।
राहेल

@jcolebrand मैंने एक्सेल ड्राइवरों की कोशिश करने के लिए नहीं सोचा था, हालांकि यह अभी आशाजनक नहीं लग रहा है। फ़ाइल एक्सटेंशन वास्तव में .bakएक सामान्य सीमांकित फ़ाइल एक्सटेंशन नहीं है, और यह त्रुटि मुझे मेरी पहली कोशिश पर दी गई है Could not find installable ISAM, इसलिए मुझे नहीं लगता कि यह काम करेगा।
राहेल

2
मैं व्यक्तिगत रूप से हर बार फ़ाइल से फ्लाई पर कॉलम सूची को पार्स करूँगा (बस फ़ाइल की पहली पंक्ति में एक काउंटर टैब करें) आयात करने के लिए आवश्यक कॉलम की संख्या के साथ रखने की कोशिश करने के बजाय, इस प्रकार गतिशील रूप से बनाई गई अस्थायी तालिका। । कभी भी हार्ड-कोड जो आप इंजीनियर को डेटा से उलट सकते हैं, मेरी राय में।
jcolebrand

जवाबों:


13

आप जिस फाइल को खोल रहे हैं, उसी डायरेक्टरी में एक सीमांकक युक्त एक स्कीमा.इन फ़ाइल बनाना होगा। यह प्रति फ़ाइल के आधार पर रजिस्ट्री मान को ओवरराइड करने का एकमात्र तरीका है। 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 को अपनी निर्देशिका में प्रत्येक पाठ फ़ाइल के साथ शामिल किया जा सकता है।


आपका बहुत बहुत धन्यवाद! मैंने एक schema.ini फ़ाइल का उपयोग करने के संकेत देखे थे, हालांकि मुझे यह पता लगाने में परेशानी हो रही थी कि कैसे एक को अपने दम पर लागू किया जाए
राहेल

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन मुझे सिर्फ "नाइस जॉब" @ डार्टनॉव कहना था।
जेफ मोदेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.