SORU
11 ŞUBAT 2013, PAZARTESİ


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 4180aşağıda belirtildiği gibi. Bu noktasıdır#7RFC 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 WizardSQL Server 2000RFC 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 WizardSQL Server 2012tablo 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 WizardSQL Server 2000Verileri CSV dosyasına vermek için aşağıdaki ayarları kullandım. 18* *adı altında dosya kurtardım.

DTS Export/Import Wizard

SQL Server Import and Export WizardSQL Server 2012Verileri CSV dosyasına vermek için aşağıdaki ayarları kullandım. Adı SQLServer2012_ItemInformation.csv altında dosya kurtardım.

SQL Server Import and Export Wizard - Choose a destination

SQL Server Import and Export Wizard - Configure Flat File Destination

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

File Comparison

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.

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şturimportinggömülü dosyalar metin eleme venotiçinexportingCSV 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
14 Mart 2013, PERŞEMBE


Ç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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • eisleyhead

    eisleyhead

    11 Ocak 2006
  • YAN TV

    YAN TV

    20 EKİM 2011