Там, кажется, не будет особого смысла в переводе недопустимые последовательности, такие как 
, но если вы удаляете недопустимых вне через REPLACE
, вы можете перевести в один выстрел годные путем преобразования в XML, а затем обратно в NVARCHAR снова:
DECLARE @string NVARCHAR(2000);
SET @string = N'<test>ᖟ</test>';
SELECT @string AS [Original],
CONVERT(XML, @string) AS [ConvertedToXml],
CONVERT(NVARCHAR(2000), CONVERT(XML, @string)) AS [ConvertedToXmlThenToNVarChar]
Возвращает:
Original ConvertedToXML ConvertedToXmlThenToNVarChar
<test>ᖟ</test> <test>ᖟ</test> <test>ᖟ</test>
Но это будет ошибкой, если вы не первым заменить недопустимые последовательности с '' (пустой строкой).
UPDATE:
Относительно другой вопрос по этой теме (How do I properly handle  in UTF-8 XML?), вы могли бы сделать что-то подобное, после чего переводит недопустимые символы в пользовательских управляющих последовательностей, которые могут быть преобразованы в пути из:
DECLARE @Original NVARCHAR(2000),
@TempXml XML,
@StoredAsNVarChar NVARCHAR(2000),
@Extracted NVARCHAR(2000);
SET @Original = N'<FileName>풜〣</FileName>';
SET @Original = REPLACE(@Original, N'', N'\uFFFF;');
SET @TempXml = CONVERT(XML, @Original);
SET @StoredAsNVarChar = CONVERT(NVARCHAR(2000), @TempXml);
SET @Extracted = REPLACE(@StoredAsNVarChar, N'\uFFFF;', NCHAR(65535));
SELECT @Original AS [OriginalAfterTranslatingInvalidCharacters],
@TempXml AS [ConvertedOriginalToXml],
@StoredAsNVarChar AS [ConvertedXmlBackToNVarChar],
@Extracted AS [ExtractedAndTranslatedBackToInvalidCharacters];
Тем не менее я хотел бы предложить попытку первого переименовать файлы таким образом, что они не имеют недопустимые символы Unicode в них, чтобы начать с, а затем важем t в SQL Server. Я не могу себе представить, что это будет единственная проблема, с которой вам придется столкнуться с этими файлами, учитывая недопустимые символы в имени файла. И как я упомянул в другом вопросе, вы уверены, что имя не так или иначе не сообщается PowerShell? Можете ли вы написать небольшое консольное приложение на C# или VB.Net, которое может использовать DirectoryInfo
для перечисления файлов в каталоге?
UPDATE 2:
На основе обсуждения (в комментариях) в другой вопрос (связанный выше), сейчас стало понятно, что нужно для этого, чтобы ответить относится к использованию XML в качестве транспортный механизм для массовой вставки информации о файле. Хотя XML может использоваться для отправки в массив данных для этой цели, более эффективным средством являются параметры таблицы (введенные в SQL Server 2008), который представляет собой строго типизированную коллекцию, которая отображается как переменная таблицы на стороне базы данных ,Я обеспечиваю пример делать это правильно (с использованием DataTable
, что большинство людей склонны использовать, является не надлежащим образом) в следующем ответе:
Pass Dictionary<string,int> to Stored Procedure T-SQL
И есть ссылка в этом ответе на другой ответ, где я представил другой пример использования TVP для потоковой передачи данных в SQL Server.
Причиной этого является выполнение массового ввода имен файлов в таблицу SQL Server. Для массивных вставок XML может быть передан непосредственно в хранимую процедуру, и SS может изначально выполнить синтаксический анализ, но XML не может содержать все символы, которые действительны в именах файлов Windows и строках C# (например, '\ uFFFF'). – Ehryk