SINGLE_NCLOB nécessite un file d'input UNICODE (widechar)

J'ai suivi ce process:

  1. Ouvrez le bloc-notes et entrez du text: "Hello World"
  2. Enregistrez le file ansi en tant que: c: \ HelloWorld.txt

Je lance ensuite la requête suivante:

select * from openrowset(bulk 'C:\HelloWorld.txt',single_clob) as test 

Le text apparaît dans une colonne appelée: BulkColumn .

Je fais alors ceci:

  1. Ouvrez le bloc-notes et entrez du text: "Hello World"
  2. Enregistrez le file Unicode en tant que: c: \ HelloWorld.txt

Je lance ensuite la requête suivante:

 select * from openrowset(bulk N'C:\HelloWorld.txt',single_nclob) as test 

L'erreur que je reçois est:

SINGLE_NCLOB nécessite un file d'input UNICODE (widechar). Le file spécifié n'est pas Unicode.

Pourquoi est-ce?

Vous devez vérifier comment vous avez enregistré le file "Unicode". Dans Windows / .NET / SQL Server, le terme "Unicode" fait spécifiquement reference à "UTF-16 Little Endian (LE)". Quand il s'agit de Big Endian UTF-16 (BE), il sera appelé "Unicode Big Endian" ou "Big Endian Unicode". UTF-8 est toujours UTF-8.

J'ai créé un file dans le Bloc-notes et suis allé à "Enregistrer sous" et sélectionné "Unicode" de la list déroulante "Enencoding" et cela a très bien fonctionné avec l'instruction que vous utilisez:

 SELECT * FROM OPENROWSET(BULK N'C:\temp\OPENROWSET_BULK_NCLOB-test.txt', SINGLE_NCLOB) AS [Test]; 

Si je l'ai enregistré de nouveau avec n'importe quel autre encoding, j'ai reçu le message d'erreur que vous voyez.

J'ai également utilisé Notepad ++ et dans le menu "Encoding" sélectionné "Encode dans UCS-2 Little Endian". UCS-2 et UTF-16 sont identiques pour les points de code U + 0000 à U + FFFF et il n'y a pas d'option UTF-16 dans Notepad ++, donc c'était la chose la plus proche. Et oui, ça a aussi marché.

Donc, d'une manière ou d'une autre, vous n'avez pas enregistré le file en tant que "Unicode". Si vous avez sélectionné "Unicode big endian" dans le Bloc-notes, ce n'est pas "Unicode" en termes d'utilisation de Windows par ce terme, même s'il s'agit d'un encoding Unicode valide.