INSERT + ORDER BY

by Alexey Knyazev 26. января 2011 00:42

Order by


Существует очень раcпространенный миф, что конструкция insert into ... select ... from ... order by ... гарантирует последовательность вставки данных в таблицу согласно условию order by. Но это заблуждение, т.к. мы не можем гарантировать последовательность физической вставки данных. Сиквел сам (по своему, неведанному нам сценарию) определяет, как данные попадут в таблицу, последовательно или параллельно и какими кусками определяет оптимизатор. При этом кляуза (clause) просто игнорируется.
Но существует очень интересная особенность, когда в таблице, в которую осуществляется вставка, есть поле IDENTITY

[Ещё]

Tags: , , , , ,

SQL Server

Чудесный оператор CROSS APPLY

by Alexey Knyazev 22. декабря 2010 01:03

Сегодня я хочу рассказать более подробно об операторе APPLY, а конкретнее о его типе CROSS APPLY. Этот оператор появился впервые в SQL Server 2005, но к сожалению многие так и не научились им пользоваться, возможно это из-за того, что в BOL (SQL Server Books Online) этот оператор плохо описан и имеет очень "сухие" примеры его использования. В этой статье я покажу несколько интересных демонстраций, где этот оператор может пригодиться.

Основная фича оператора заключается в том, что APPLY позволяет вызывать табличную функцию для каждой строки, возвращаемой внешним табличным выражением запроса. Именно этот пример есть в BOL.
Оператор CROSS APPLY возвращает только строки из внешней таблицы, которые создает результирующий набор из возвращающего табличное значение функции. Оператор OUTER APPLY возвращает и строки, которые формируют результирующий набор, и строки, которые этого не делают, со значениями NULL в столбцах, созданных возвращающей табличное значение функцией.

[Ещё]

Tags: , , ,

SQL Server

Job Viewer

by Alexey Knyazev 19. октября 2010 00:07



Прошло почти два года, как я выкладывал небольшую самописную утилиту на ITCommunity.RU, позволяющую мониторить выполнение Job`ов сразу на нескольких серверах БД. Я и подумать не мог, что она окажется такой полезной. За это время я получил несколько писем с просьбой обновить её и добавить поддержку SQL Server 2000. И вот наконец-то руки дошли до этой утилиты.



Эта версия поддерживает SQL Server 7.0/2000/2005/2008/2008R2. Если найдете какие-то ошибки, или у вас возникнут пожелания, связанные с доработкой этой программки, то пишите, постараюсь дополнить её полезным функционалом.
[Ещё]

Tags: , , , , ,

SQL Server

Удобная процедура трассировки событий на стороне сервера

by Alexey Knyazev 23. июля 2010 23:21

SQLTrace Для всех, кто работает с SQL Profiler для отслеживания событий на сервере, хорошо известно, как создавать трассировки. Это не представляет никакой сложности. И действительно, SQL Server Profiler обладает богатым интерфейсом, предназначенным для создания и управления трассировкой, позволяющим анализировать и воспроизводить результаты трассировки.


Но всегда ли есть возможность воспользоваться SQL Profiler`ом!? А самое главное работа Profiler приводит к значительным накладным расходам. Основные затраты идут на создание наборов строк для отправки их клиенту Profiler. В этом плане трассировка с помощью команд T-SQL позволяет минимизировать воздействие на производительность, т.к. она выполняется на стороне сервера и избегает перегрузки.


Кромя того, большинство экспертов по MS SQL Server, в том числе и сотрудники Microsoft рекомендуют отдать предпочтение трассировке на стороне сервера. Это подтверждают и тесты, особый интерес у меня (думаю и у вас) вызвала статья Performance Impact: Profiler Tracing vs. Server Side SQL Tracing.


Разница в замерах чуть ниже, а сейчас скажу о чём собственно это статья и что же это за удобная процедура трассировки: как извесно трассирывание на T-SQL очень трудоёмкая задача и не слишком понятная для начинающих администраторов/разработчиков, поэтому у меня и возникла идея написать что-то более понятное и удобное для повседневного использования.

[Ещё]

Tags: , , ,

SQL Server

SQL Server требует постоянно перезагрузку

by Alexey Knyazev 14. июня 2010 00:48

Ошибка с которой и мне пришлось столкнуться, при установке SQL Server либо SP, требовалась перезагрузка, но после перезагрузки сообщение появлялось опять:


Rule "Restart computer" failed.
A computer restart is required. You must restart this computer before installing SQL Server.


Решается проблема достаточно просто, правкой реестра: Находим ветку "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations" и удаляем или переименовываем ключ PendingFileRenameOperations


 


Этого должно быть достаточно, но если и это не поможет, то проделайте теже действия с ключами ещё пары веток реестра:



  • "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Control\Session Manager\PendingFileRenameOperations"

  • "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet002\Control\Session Manager\PendingFileRenameOperations"


После этого можно продолжить установку SQL Server.

[Ещё]

Tags: , ,

SQL Server

SQL Server Management Studio зависает

by Alexey Knyazev 12. мая 2010 01:47

Периодически на форумах возникает вопрос, подобный этим:



  • "Почему SQL Server Management Studio так медленно работает?"

  • "SSMS постоянно виснет"

  • "Почему Management Studio так долго открывается/закрывается".


Для решения подобных проблем, предлагаю проделать кое какие действия:



1. Убедитесь, что ваша рабочая станция соответствует всем минимальным требованиям, как в плане "железа", так и софта, для работы SSMS (SQL Server Management Studio)
Например для удовлетворительно работы Microsoft® SQL Server® 2008 Management Studio Express потребуется:



Системные требования



  • Поддерживаемые операционные системы: Windows 7; Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Server 2008 R2; Windows Vista; Windows Vista Service Pack 1; Windows XP Service Pack 2; Windows XP Service Pack 3

  • 32-разрядные системы: компьютер, оборудованный процессором Intel или совместимым процессором с тактовой частотой 1 ГГц или выше (рекомендуется 2 ГГц или выше, поддерживается только один процессор)

  • 64-разрядные системы: процессор с тактовой частотой 1,4 ГГц или выше (рекомендуется 2 ГГц или выше, поддерживается только один процессор)

  • Минимальный объем ОЗУ 512 МБ (рекомендуется 1 ГБ или более)

  • 1 ГБ свободного места на диске



2. Посмотрите версию вашего клиента ( "Help" -> "About" ), возможно стоит обновиться до последнего SP (сервис пака) или существует SQL Server Hotfix, который может решить ваши проблемы. Список доступных версий можно посмотреть по ссылке http://www.t-sql.ru/page/versions.aspx.



3. Возможно какое-то из Ваших приложений «мешает» работе SSMS, например антивирус, убедитесь, что он верно настроен.


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


5. Запретите загрузку помощи из сети: "Tools" -> "Options" -> "Help" -> "Online" укажите "Try local first, not online".



6. Отключите проверку аннулированных сертификатов в "Internet Explorer" -> "Tools" -> "Internet Options" -> "Advanced" и снять «галки» с Check for server certificate revocation и Check for publisher's certificate revocation
(Подробнее: http://msmvps.com/blogs/gladchenko/archive/2007/01/16/497463.aspx)



7. Отключите отображение экрана-заставки при открытии среды SQL Server Management Studio. Правой кнопкой мыши по ярлыку SSMS и в свойствах добавьте параметр "nosplash" (http://msdn.microsoft.com/ru-ru/library/ms162825(SQL.100).aspx).



8. Отключите автосохранение в реестре (ключ AutoRecover Enabled), ибо SSMS фоново сохраняет информацию ( HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\General\AutoRecover ).


9. Определите значения переменных %vsspv_visualstudio_dir% и %vsspv_vs_install_directory% , либо в реестре явно укажите пути для параметров DefaultSettingsDirectory и LastResetSettings ( HKCU\Software\Microsoft\Microsoft SQL Server\100\Tools\Shell\Profile ).
Например:
"%USERPROFILE%\My Documents\SQL Server Management Studio\Projects"
и
"%USERPROFILE%\Мои документы\SQL Server Management Studio\Common7\IDE\Profiles\sqlshell.vssettings"
соответственно.



10. Сам не пробовал, но рекомендуют заменить видеокарту, возможно, это поможет, если ни один из пунктов выше не решил ваших проблем.

[Ещё]

Tags: , , ,

SQL Server

Управление SQL Server c помощью PowerShell

by Admin 5. апреля 2010 16:34

Мой доклад на TechDays.RU 

PowerShell стал неотъемлемой частью большинства новых продуктов Microsoft, в том числе и SQL Server. Данный доклад показывает всю мощь командной строки для администрирования ваших серверов БД.

[Ещё]

Tags: , , ,

PowerShell | SQL Server

Мой SQL Server отличный переводчик

by Admin 17. марта 2010 12:42

Совсем недавно у меня появилась безумная идея: как организовать автоматический перевод текстов внутри сервера БД.


Возможно, это глупо перекладывать такую логику и задачу на SQL Server, т.к. он предназначен совсем для других целей...но, согласитесь, как было бы здорово, если бы наш сервер сам переводил наши данные на другой язык либо динамически либо по расписанию, пусть даже это будет машинный перевод. Прежде чем приступить к реализации этого безумия, я стал искать какие переводчики доступны в сети, главные критери: бесплатный и более или менее читабельный перевод.


Мой выбор пал на переводчик Microsoft® Translator (http://www.microsofttranslator.com/)

[Ещё]

Tags: , , , ,

SQL Server

Своё шифрование в SQL Server 2005 и выше

by Alexey Knyazev 9. марта 2010 11:57

Практически в любой отрасли существуют свои критические данные, которые требуют шифрования. Начиная с SQL сервера версии 6.x, для шифрования данных вы можете применять функцию ENCRYPT (в последних версия эта функция уже недоступна), которая использует тот же метод (шифрования), что и опция WITH ENCRYPTION.


Начиная с SQL Server 2000 появилась недокументированная функция PWDENCRYPT, которая возвращает Хэш пароля (PWDENCRYPT — это устаревшая функция, которая может не поддерживаться в будущих версиях SQL Server. Вместо этого используйте программу HASHBYTES. HASHBYTES предоставляет больше алгоритмов хэширования), а так же PWDCOMPARE - Хэширует пароль и сравнивает хэш с хэшем существующего пароля.


Для более сложного шифрования данных до версии SQL Server 2005 приходилось "изобретать велосипед", но начиная с 9ой версии шифрование и дешифровка стали встроенным функционалом. А в SQL Server 2008 появилось прозрачное шифрование.


Но в очередной раз попробуем изобрести велосипед и организовать своё шифрование данных в виде CLR-сборки.

[Ещё]

Tags: , , , , ,

SQL Server

Загрузка/выгрузка файлoв в/из BD (+их компрессия)

by Alexey Knyazev 2. марта 2010 11:37

У любого разработчика БД рано или поздно возникает потребность вставить файл(ы) в базу. Преимуществ хранения файлов внутри БД уйма, как и недостатков, но сегодня не об этом, а вообще о том, как возможно загрузить/выгрузить файлы. Наиболее интересный и правильный вариант, на сегодня, работы с файлами - это FileStream (появился в SQL Server 2008).


Хранилище FILESTREAM в SQL Server 2008 позволяет приложениям на основе SQL Server хранить в файловой системе неструктурированные данные, такие как документы и изображения. Приложения могут эффективно использовать многопоточные API-интерфейсы и производительность файловой системы, одновременно обеспечивая согласованность между неструктурированными и соответствующими им структурированными данными.


Но всё же до сих пор многих интересует вариант хранения файлов внутри обычных таблиц в полях BLOB (image/varbinary). Вставку файлов в БД и последующую работу с ними легко организовать с помощью нескольких строк на любом языке программирования, но мы попробуем обойтись средствами SQL Server`а.

[Ещё]

Tags: , , , ,

SQL Server