То, что хорошие проблемы состоят в том, чтобы решить CLR использования, сохранило procs?

Отличные решения там, но в конечном итоге каждый скрипт будет терпеть неудачу, если вы не находитесь в правильном каталоге. Таким образом, код выглядит следующим образом:

if [ -d "$LINK_OR_DIR" ]; then 
if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here
    rm "$LINK_OR_DIR"
else
    # It's a directory!
    # Directory command goes here
    rmdir "$LINK_OR_DIR"
fi
fi

будет успешно выполняться только в том случае, если на момент выполнения вы находитесь в директории, в которой есть подкаталог, который вы проверяете.

Насколько я понимаю, начальный вопрос: проверить, существует ли каталог независимо от положения пользователя в файловой системе. Поэтому использование команды «найти» может сделать трюк:

dir=" "
echo "Input directory name to search for:"
read dir
find $HOME -name $dir -type d

Это решение хорошо, потому что оно позволяет использовать подстановочные знаки, полезную функцию при поиске файлов / каталогов. Единственная проблема заключается в том, что если искомый каталог не существует, команда «найти» ничего не выведет на stdout (не элегантное решение на мой вкус) и, тем не менее, будет иметь нулевой выход. Может быть, кто-то может улучшить это.

16
задан Tj Kellie 26 January 2010 в 17:12
поделиться

6 ответов

Многие проблемы, требующие денормализации и / или последовательных операций, могут быть обработаны исключительно скважины CLR и могут быть использованы для резко повышения производительности, не жертвуя удобством использования на конце SQL (многое). Вместо того, чтобы полагаться полностью на настроенную или итеративную операцию, вы можете взять гибридный подход, используйте настроенное решение для больших перевозок и переключиться на итеративную модель для плотных петлей.

Встроенный иерархид и геопространственный (I.E. География ) Типы в SQL Server 2008 - хорошие примеры проблемы денормализации. Оба содержат (почти) произвольно большое количество данных, которые трудно нормализовать, не причиняя боль производительности - вам нужно будет использовать рекурсию или курсоры, чтобы сделать любую значимую работу с ними, или использовать гнездо крыса триггеров и / или запланированных задач поддерживать таблицу денормализации.

Другая проблема, которую я решаю с типами CLR, является встроенным сжатием. Это может звучать как бессмысленные или академические упражнения, но когда ваши полно нормализованные данные выдвигаются в терабайты, увеличение размера 80-90% в размере. SQL имеет свой собственный встроенную сжатие, и SQL 2005 был Vardecimal, и это также являются хорошими инструментами, но алгоритм «минимизации« минимизации домена »может быть в несколько раз более эффективным с точки зрения как нагрузки нагрузки и скорости процессора, так и сжатия. Очевидно, что это не относится к любой проблеме, но это относится к некоторым.

Еще одна очень распространенная проблема, часто встречающаяся на этом сайте, генерирует последовательность на лету - например последовательность последовательных дат. Общие решения являются рекурсивными CTE, столы статической последовательности и малоизвестные SPT_Values ​​ таблицы, но простой CLR UDF выполняет лучше, чем любой из них и предлагает гораздо больше гибкости.

Последнее в моем списке: Пользовательские потоковые агрегаты также очень полезны, особенно для чего-либо статистики. Существуют некоторые вещи, которые вы просто не можете составить из встроенных агрегатов SQL, такие как медианы, взвешенные скользящие средние значения и т. Д. УДА, также могут принимать несколько аргументов, чтобы вы могли их параметрировать; Технически совокупность не гарантируется получать данные в каком-либо конкретном порядке в текущей версии SQL Server, но вы можете обойти это ограничение, подарив его ROW_NUMBER как дополнительный аргумент и использовать его для реализации просто О любой функции опускания (имеют агрегат вымирают UDT, который затем может быть преобразован в таблицу).

На самом деле очень расстраивает, насколько мало примеров существует действительно полезных приложений SQL-CLR; Ищите на Google, и вы получите 10 миллионов результатов, каждый из них для некоторого силкового конкатенации или регенерации. Это полезно, но займет несколько минут, чтобы узнать о SQL UDTS и UDAS в частности, и вы начнете видеть множество используемых для них в ваших собственных приложениях. Не ходите гайки, конечно - тщательно подумайте о том, есть ли лучшее решение в чистом SQL - но не сбрасывает их.

23
ответ дан 30 November 2019 в 16:30
поделиться

Это очень полезно для извлечения данных из системы, которая не предоставляет традиционный интерфейс SQL, или реализация этого интерфейса вендором является подпунктом.

У нас есть базовое приложение, построенное на старой платформе MUMPS и работающее на базе данных Intersystems Cache. Данные являются иерархическими, не реляционными по своей природе. Основной глобальный массив (то есть таблица) имеет несколько уровней данных и элементы, все сгруппированные по номеру счета. Сканирование даже одного столбца требует загрузки всего глобального с диска, и это занимает более 8 часов. Поставщик действительно предоставляет драйвер ODBC и сопоставления глобальным переменным, но это часто приводит к сканированию и чрезвычайно медленным запросам.

Я построил табличную функцию, которая принимает программу ObjectScript (межсистемный диалект MUMPS), выполняет ее на сервере Cache и возвращает выходные строки в виде строк данных. Я могу микроуправлять путем доступа к данным на стороне MUMPS (это действительно то, что нужно для получения эффективного доступа к данным), предоставляя конкретную программу для выполнения на этой стороне, а затем легко импортировать данные в MSSQL как специальный встроенный источник данных.

Я могу использовать TVF для управления выбором данных или использовать CROSS APPLY для поиска на другом конце, и это достаточно эффективно. Я даже могу запустить несколько запросов на удаленном конце параллельно, если заставлю MSSQL использовать план параллельного выполнения.

1
ответ дан 30 November 2019 в 16:30
поделиться

Струнные манипуляции - обычный поиск выражений - это классика. Очень легко разоблачить в CLR, очень сложно сделать в прямой T-SQL.

См. Эта ссылка для получения подробной информации о внедрении и микроэнергетике ( SQLCLR составляет всего 47 миллисекундров по сравнению с 6,187 секундами для T-SQL UDF ).

5
ответ дан 30 November 2019 в 16:30
поделиться

Струнные манипуляции (REGEXES) уже упоминались, но и арифметики TateTime, и, конечно, еще один BIGGIE - вызывая внешние веб-сервисы.

5
ответ дан 30 November 2019 в 16:30
поделиться

Вот пример чего-то, что я использовал CLR Procs для того, чтобы я думал, что было аккуратно:

Обновление данных с внешних веб-сервисов, используя CLR, сохраненные Procs и SQL задания.

У нас есть приложение, которое синхронизирует некоторые данные, которые он отслеживает с внешней отраслью данных. Синхронизация проходит еженедельно для всего и по требованию к одному обновлениям, поэтому у меня была существующая API WebService для доступа к нему. Вещи уже запланированы службой Windows, но я думал, почему не сможет рассмотреть их, как наши другие вакансии SQL ??

Я создал CLR сохраненную процедуру, которая возлагается на API WebService Application. Затем я добавил несколько париток для @recordid для поддержки одной синхронизации и запланировал его в соответствии с рабочими работами Enterprise Manager SQL.

Теперь я могу использовать работу для запуска DB синхронизации или использовать ProC в других SQL Procs или Triggers для обновления данных от внешнего подачи.

Может быть очиститель, чтобы взять приложение Webservice API в будущем и просто используйте внешнюю веб-сервис напрямую. Именно в настоящее время это было очень быстро для реализации и прохладный способ расширить функциональность в группу SQL.

3
ответ дан 30 November 2019 в 16:30
поделиться
  • Пользовательские агрегаты
  • Манипуляция строк
  • Пользовательские типы данных

, чтобы быть честным, я только вижу только обработку строки, которое включает разделение CSV в строки.

Я бы рассмотрел все, что нужно больше, чем уровень доверия по умолчанию, чтобы быть вне границ, если я не имел DBA Type Type Tire.

От MSDN с примерами подачи REGEX и RSS: Использование интеграции CLR в SQL Server 2005

2
ответ дан 30 November 2019 в 16:30
поделиться