में फ़ाइल के आयात को कैसे संभाला जाए, नॉर्वे में हमारे पास 3 अत्यधिक परेशान करने वाले पात्र हैं, इसलिए, सभी प्रकार की समस्याएं पैदा होती हैं। एसक्यूएल सर्वर 2008 के बाद से, माइक्रोसॉफ्ट ने कोडपेज 65001 का समर्थन नहीं करने का फैसला किया। मुझे यूटीएफ -8 फ़ाइल को OPLROWSET (बल्क) के साथ एसक्यूएल सर्वर में आयात करने और æøå टोकन रखने की समस्या का एक प्रबंधनीय समाधान मिला है।यूटीएफ -8 एन्कोडिंग, कोडपृष्ठ = 65001, एसक्यूएल सर्वर
मैंने एक पावरहेल स्क्रिप्ट बनाई है जो फ़ाइल को यूटीएफ -8 से डिफ़ॉल्ट एन्कोडिंग, एएनएसआई में कनवर्ट करने के लिए StreamReader और StreamWriter का उपयोग करता है।
$filename = "C:\Test\UTF8_file.txt"
$outfile = "C:\Test\ANSI_file.txt"
$reader = new-object System.IO.StreamReader($filename, [System.Text.Encoding]::GetEncoding(65001))
$stream = new-object System.IO.StreamWriter($outfile, $false, [System.Text.Encoding]::Default)
मैं उसी प्रक्रिया में पहली पंक्ति, शीर्षलेख पंक्ति की फ़ाइल को पट्टी करता हूं।
$i=1
while(($line = $reader.ReadLine()) -ne $null) {
if($i -gt 1) {
$stream.WriteLine($line)
}
$i++
}
$reader.Close()
$stream.Close()
तब मैं एसक्यूएल सर्वर और ऐसा करते समय डेटा जोड़ तोड़ में एएनएसआई फ़ाइल आयात करने OPENROWSET उपयोग करने में सक्षम हूँ। कोडपेज 1252 का उपयोग करना, जो danish_norwegian collation के बराबर है।
insert into SomeDatabase.dbo.SomeTable
SELECT [companynumber]
, case [role] when 'Styreformann' then 'Styreleder' when 'Styrets leder' then 'Styreleder' else rolle end as 'role'
, case [representant] when 'Y' then '1' else '0' end as 'representant'
, left((RIGHT('0000'+ CONVERT(VARCHAR,postnr),5)),4) end as 'postnr'
, income*1000 as income
, null as person2id
FROM OPENROWSET(BULK 'C:\Test\ANSI_file.txt',
FORMATFILE = 'C:\Test\FormatBulkInsert_file.xml'
, CODEPAGE =1252
, ROWS_PER_BATCH = 50000
) as v
इस विधि ने सुरक्षित किया कि नारियल टोकन सही तरीके से प्रदर्शित किए गए थे। प्रारूप फ़ाइल इस तरह दिखता है:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR=';"' />
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR='";"' />
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR='";"' />
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR='";' />
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR=';' />
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR='\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="companynumber" xsi:type="SQLINT"/>
<COLUMN SOURCE="2" NAME="role" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="representant" xsi:type="SQLBIT"/>
<COLUMN SOURCE="4" NAME="postnr" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="income" xsi:type="SQLDECIMAL"/>
<COLUMN SOURCE="6" NAME="person2id" xsi:type="SQLINT"/>
</ROW>
</BCPFORMAT>
आशा इस किसी और के लिए उपयोगी है, क्योंकि मैं काफी समय googleing का एक बहुत खर्च इससे पहले कि मैं इस समस्या को हल करने के लिए एक रास्ता मिल गया।