С помощью LINQ, хороший ответ by @seriesOne можно немного упростить, заменив операторы foreach
и return
на:
// using System.Linq;
// Look for a match...
var result = cases
.Where(c => c.Item3(subArea, c.Item1))
.FirstOrDefault();
// Return the match or the default.
return result == null ? "ABCXYZ123" : result.Item2;
http://msdn.microsoft.com/en-us/library/ms162802.aspx
А BCP операция требует ИЗБРАННОГО разрешения на исходной таблице.
А, которых минимально требует BCP в операции, ВЫБИРАЮТ/ВСТАВЛЯЮТ полномочия на целевой таблице. Кроме того, разрешение ALTER TABLE требуется, если какое-либо следующее верно:
Ограничения существуют, и подсказка CHECK_CONSTRAINTS не определяется. ms162802.note (en-us, SQL.100) .gifNote: Отключение ограничений является поведением по умолчанию. Для включения ограничений явно используйте-h опцию с подсказкой CHECK_CONSTRAINTS.
Триггеры существуют, и подсказка FIRE_TRIGGER не определяется. ms162802.note (en-us, SQL.100) .gifNote: По умолчанию триггеры не запущены. Для увольнения триггеров явно используйте-h опцию с подсказкой FIRE_TRIGGERS.
Вы используете-E опцию импортировать значения идентификационных данных из файла данных.
Примечание: Требование разрешения ALTER TABLE на целевой таблице было новым в SQL Server 2005. Это новое требование могло бы вызвать сценарии BCP, которые не осуществляют триггеры, и ограничение проверяет к сбою, если учетная запись пользователя испытывает недостаток в полномочиях таблицы ALTER целевой таблицы.
Существует bulkadmin роль, которая позволяет команды BULK INSERT. http://msdn.microsoft.com/en-us/library/ms189934 (SQL.90) .aspx
Для успешного выполнения класса SqlBulkCopy необходимы только разрешения SELECT / INSERT. Класс выдает инструкцию INSERT BULK для целевой таблицы SQL Server. Проверено сегодня на одном из наших серверов разработчиков.