Nasıl düz CSV dosyasına veri verme sırasında gömülü metin niteleyici düzeltmek için sorun?
RFC 4180:
RFC 4180tanımlarCommon Format and MIME Type for Comma-Separated Values (CSV) Files
. Bu gereksinimlerden biriRFC 4180
aşağıda belirtildiği gibi. Bu noktasıdır#7
RFC link.
If double-quotes are used to enclose fields, then a double-quote
appearing inside a field must be escaped by preceding it with
another double quote. For example:
"aaa","b""bb","ccc"
SQL Server 2000:
DTS Export/Import Wizard
SQL Server 2000
RFC 4180 olsa da yukarıda belirtilen standartlara uygun görünüyor kendisi sadece üzerinde yayınlanmıştır gibi görünüyorEkim 2005. Aşağıda belirtilen kullanıyorumSQL Server 2000sürüm.
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
May 3 2005 23:18:38
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
SQL Server 2012:
SQL Server Import and Export Wizard
SQL Server 2012
tablo verileri CSV dosyasına verme standardına göre RFC 4180 tanımlanmış. Aşağıda belirtilen kullanıyorumSQL Server 2012sürüm.
Microsoft SQL Server 2012 - 11.0.2316.0 (X64)
Apr 6 2012 03:20:55
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Sorunu Simülasyon:
Burada hem ben çalışan bir örnekSQL Server 2000veSQL Server 2012. Sorgu aşağıda bir tablo oluşturmak ve birkaç kayıt eklemek için koştum. ItemDesc
sütun içinde çift tırnak ile veri vardır. Benim niyetim bu iki SQL Server sürümleri-dahili ihracat veri Sihirbazı kullanarak kendi veri aktarmak ve oluşturulan CSV dosyaları karşılaştırmak için.
CREATE TABLE dbo.ItemInformation(
ItemId nvarchar(20) NOT NULL,
ItemDesc nvarchar(100) NOT NULL
)
GO
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100338754', 'Crown Bolt 3/8"-16 x 1" Stainless-Steel Hex Bolt');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202255836', 'Simpson Strong-Tie 5/8" SSTB Anchot Bolt');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100171631', 'Grip-Rite #11 x 1-1/2" Electro-Galvanized Steel Roofing Nails');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202210289', 'Crown Bolt 1/2" x 3" "Zinc-Plated" Universal Clevis Pin');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100136988', 'Tapcon 3/16" x 1-3/4" Climaseal Steel "Flat-Head" Phillips Concrete Anchors (75-Pack)');
INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('203722101', 'KwikTap 3/16" x 2-1/4" "Flat-Head" Concrete Screws (100-Pack)');
GO
DTS Export/Import Wizard
SQL Server 2000
Verileri CSV dosyasına vermek için aşağıdaki ayarları kullandım. 18* *adı altında dosya kurtardım.
SQL Server Import and Export Wizard
SQL Server 2012
Verileri CSV dosyasına vermek için aşağıdaki ayarları kullandım. Adı SQLServer2012_ItemInformation.csv
altında dosya kurtardım.
Burada iki dosya arasında karşılaştırma kıyaslanamaz kullanarak. Sol tarafta dosyası SQL Server 2000
tarafından oluşturulan ve dosya SQL Server 2012
tarafından oluşturulan içerir sağ tarafı içerir. SQL Server 2000
sol yan dosya-tırnak çift sütunda veri gömülü tırnak telafi etmek için ek içerdiğine dikkat edin. Bu standart RFC 4180
belirtilen uygun ama açıkça dosyası SQL Server 2012
tarafından oluşturulan eksik
Aramalarda web:
Web üzerinde bu hata için aradım ve aşağıdaki Linkleri buldum. Aşağıdaki Microsoft raporlar Bağlamak hata. Tüm bu sorunları bir dosya ama veri verme hakkında hiçbir şey alma ile ilgili gibi görünüyor. Tüm bu böcekler Fixed
olarak kapatılmıştır.
- SSIS flat file parser does not read Column delimiters embedded in text data
- Flat File Connection Manager not handling Text Delimiters in CSV Files
- Embedded quotes in Flat File Import fails
- BUG: Flat File Connection Manager: multiple-character text qualifier does not load all data
MSDN blog üzerinde aşağıdaki değişiklikleri Flat file source supports embedded qualifiers and a variable number of columns per row
saygı ile SQL Server 2012'de yapılan Birleşik Devletleri
MSDN başka bir post Birleşik Devletleri Bölümü altında aynı Embedded Qualifiers
blog.
Bildiğim kadarıyla çözüm:
Tüm çift tırnak yerini alacak bir sorgu yazarak sorunu düzeltmek için bir çözüm biliyorum"
iki çift tırnak ile sütun veri (""
) verilen dosya gömülü niteleyici veri doğru ile sona erecek. Bu gibi doğrudan veri çekerek masadan uzak durur.
Soru:
Eğer bu sorunu gerçekten
SQL Server 2012
düzeltildi mi, bilmiyorum. Bu sorun sadece sabit olmuşturimporting
gömülü dosyalar metin eleme venot
içinexporting
CSV veri?Muhtemelen, açıkça yanlış bir şey yapıyor zaten belli olan bir şeyi kaçırıyorum. Birisi burada yanlış yapıyorum ne bana açıklayabilir misiniz?
Microsoft Connect:
Microsoft Connect web sitesinde bir hata raporu onların geri bildirim almak için teslim oldum. İşte hata raporu bağlantısını. Eğer bu bir hata olduğunu kabul ediyorsanız, lütfen aşağıdaki bağlantıyı Microsoft Connect
web sitesinde oy için ziyaret edin.
Embedded text qualifier during export to CSV does not conform to RFC 4180
CEVAP
Çok zor belgeye çalıştın dışında bu cevap teklif etmem ve bir ay sonra cevap ile upvoted oldu. O yüzden, işte başlıyorum. Yalnızca seçimler verileri değiştirmek veya aracını değiştirmek gibi görünüyor.
Muhtemelen, açıkça yanlış bir şey yapıyor zaten belli olan bir şeyi kaçırıyorum. Birisi burada yanlış yapıyorum ne bana açıklayabilir misiniz?
Aracı bozulur ve satıcı umurumda değil ne zaman, denemeye devam etmek hata olur. Değiştirmek için zamanı. Kırık ve sadece RFC ama aracın kendi anlaşmaları ihlal ettiğini gösteren tam olarak araştırma içine çaba bir sürü koyun. Daha ne kadar kanıt lazım mı?
CSV bir tekne de çapa. Eğer bu seçenek varsa, sıradan ayrılmış dosya biçimi kullanarak daha iyidir. Pek çok uygulama için, sekme ile sınırlandırılmış iyidir. En iyi ayırıcı IMO '\' bu karakter İngilizce metin yer yok çünkü. (Veriler için işe yaramaz öte yandan Windows yol adlarını içeren.)
CSV bir değişim biçimi olarak iki sorunu var. İlk olarak, tüm standart değil, farklı uygulamalar RFC ne derse desin farklı versiyonları, tanır. İkinci (ve ilgili) teşkil etmeznormal dildüzenli ifade olarak ayrıştırılması imkansız olan CS açısından. Sekme ile sınırlandırılmış bir hat için ^([^\t]*\t)*[\t]*$
ile karşılaştırın. CSV tanımı karmaşıklığını pratik imalar da (yukarıda) bunları işlemek için araçlar göreli eksiklik ve uyumsuz, özellikle sabahın erken saatlerinde olması için onların eğilimi.
CSV ver ve boot DTS, bcp.exe
iyi bir seçenek var. Microsoft yıllardır güncellemek için cazip gelmedi çünkü çok hızlı ve güvenli. DTS hakkında çok şey bilmiyorum, ama otomasyon için kullanmak varsa, IIRC harici programları çağırmak için bir yolu yoktur. bcp.exe
kabuk genişliğinde fazla hata durumu döndürmez ama dikkat,.
Eğer DTS kullanmak ve CSV ile sopa için kararlı iseniz, o zaman gerçekten en iyi seçeneğin, bunun için uygun veri hazırlayan bir görünüm yazmaktır. İsterdim, eğer destek o köşe oluşturmak şeması olarak adlandırılan, "DTS2012CSV", böylece ben yazarım select * from DTS2012CSV.tablename
veren kimse kimin umurunda bir mücadele şansı anlamak (çünkü ulaşabilirsiniz belge, değil mi, açıklamalarda görünümü metin?). Eğer gerekirse, Diğerleri diğer kırık özleri tekniği kopyalayabilir.
HTH.
Başlatılmamış sabit Komisyon düzeltmek...
Nasıl C Bir metin dosyasına metin ekle...
Nasıl Y metin CSS geçiş sırasında deği...
Nasıl bazı ikili veri içeren bir metin...
Nasıl daha sonra düz metin alma için e...