Подтвердить что ты не робот

SQL Server Management Studio - советы по улучшению процесса кодирования TSQL

Я работал в месте, где обычной практикой было использование Pair Programming. Я помню, сколько мелких вещей мы могли бы узнать друг от друга, работая вместе над кодом. Подбор новых ярлыков, фрагментов кода и т.д. Со временем значительно улучшил нашу эффективность написания кода.

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

Итак, вот вопрос:

  • Что вы можете сказать об эффективных запись TSQL-кода с использованием SQL Server Студия управления?
  • Пожалуйста, сохраните советы по 2 - 3 вещам/ярлыкам, которые вы думаете, что улучшите скорость кодирование
  • Пожалуйста, оставайтесь в рамках управления TSQL и SQL Server Студия 2005/2008 Если эта функция специфичный для версии Студия управления просьбой указать: например "Работает с SQL Server 2008 только "

EDIT:

Я боюсь, что некоторые из вас могли быть неправильно поняты. Я не ищу советы для написания эффективного кода TSQL, а скорее для советов о том, как эффективно использовать Management Studio для ускорения процесса кодирования.

Тип ответов, которые я ищу:

  • использование шаблонов,
  • сочетания клавиш,
  • использование плагинов IntelliSense и т.д.

В основном те мелочи, которые делают кодирование более эффективным и приятным.

4b9b3361

Ответ 1

Сообщество wiki Ответ - не стесняйтесь редактировать или добавлять комментарии:

Сочетания клавиш

  • F5, CTRL + E или ALT + X - выполнить текущий выбранный код TSQL
  • CTRL + R - показать/скрыть панель результатов
  • CTRL + N - Открыть новое окно запроса
  • CTRL + L - Показать план выполнения запроса

Редактирование ярлыков

  • CTRL + K + C и CTRL + K + U - комментировать/раскомментировать выбранный блок кода (предлагается Unsliced)
  • CTRL + SHIFT + U и CTRL + SHIFT + L - изменяет выделенный текст на верхний/нижний регистр
  • SHIFT + ALT + Выбор текста - выбор/вырезание/копирование/вставка прямоугольного блока текста

Аддоны

Другие советы

  • Использование стиля префикса запятой (предложенный Cade Roux)
  • Использование ускорителей клавиатуры (предлагается kcrumley)

Полезные ссылки

Ответ 2

Взгляните на Red SQL SQL Prompt - это отличный продукт (как и большинство вкладов Red Gate)

SQL Inform также является отличным бесплатным (онлайн) инструментом для форматирования длинных процедур, которые иногда могут выйти из-под контроля.

Кроме того, я узнал из мучительного опыта, что предшествует любому DELETE с BEGIN TRANSACTION. Как только вы уверены, что ваш оператор удаляет только то, что должен, вы можете COMMIT.

Сохранял меня в нескольких случаях; -)

Ответ 3

+1 для SQL-запроса.

Что-то реальное простое, что, я думаю, я никогда не видел - это будет работать с почти любой средой SQL (и даже на других языках):

После 12 лет SQL-кодирования я недавно стал конвертировать в стиль префикса после запятой, увидев его в некотором SSMS-коде, я нашел его очень эффективным. Я был очень удивлен, что раньше этого стиля не видел, тем более, что он значительно увеличил мою производительность.

SELECT
t.a
,t.b
,t.c
,t.d
FROM t

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

Попробуйте, вы будете удивлены - я знаю, что был.

Ответ 4

Мой любимый быстрый совет заключается в том, что при расширении имени таблицы в проводнике объектов просто перетаскивание колонок слов на экран запроса поместит список всех столбцов в таблице в запрос. Намного проще просто удалить те, которые вам не нужны, чем набирать те, которые вам нужны, и это так просто, что не позволяет людям использовать действительно ужасный синтаксис select *. И это предотвращает опечатки. Конечно, вы можете индивидуально перетаскивать столбцы.

Ответ 5

Выделение объекта в запросе и нажатие ALT + F1 будет запускать sp_help для него, давая вам разбивку любых столбцов, индексов, параметров и т.д.

Ответ 6

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

По возможности старайтесь избегать курсоров на стороне сервера. Всегда придерживайтесь "подхода на основе набора" вместо "процедурного подхода" для доступа к данным и управления ими. Курсоры часто можно избежать, используя вместо этого инструкции SELECT.

Всегда используйте графический план выполнения в командах Query Analyzer или SHOWPLAN_TEXT или SHOWPLAN_ALL для анализа ваших запросов. Убедитесь, что ваши запросы выполняют "поиск индекса", а не "сканирование индекса" или "сканирование таблицы". Сканирование таблицы или сканирование индекса - очень плохая вещь, и ее следует избегать, когда это возможно. Выберите правильные индексы в правой колонке. Используйте более читаемые условия соединения ANSI-Standard, а не объединения старого стиля. При соединении ANSI предложение WHERE используется только для фильтрации данных. Где, как и в случае со старым стилем, предложение WHERE обрабатывает как условие соединения, так и данные фильтрации.

Не позволяйте вашим внешним приложениям напрямую запрашивать/манипулировать данными с помощью операторов SELECT или INSERT/UPDATE/DELETE. Вместо этого создайте хранимые процедуры и позвольте вашим приложениям обращаться к этим хранимым процедурам. Это обеспечивает чистоту и согласованность доступа данных во всех модулях вашего приложения и в то же время централизует бизнес-логику в базе данных.

Говоря о хранимых процедурах, не присваивайте имена хранимых процедур "sp_". Префикс sp_ зарезервирован для системной хранимой процедуры, поставляемой с SQL Server. Всякий раз, когда SQL Server сталкивается с именем процедуры, начинающимся с sp_, он сначала пытается найти процедуру в основной базе данных, затем он ищет предоставленные квалификаторы (базу данных, владельца), затем пытается dbo как владелец. Таким образом, вы можете сэкономить время при поиске хранимой процедуры, избегая префикса "sp_".

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

Когда это возможно, попробуйте использовать встроенную проверку подлинности. Это означает, что вы забываете о пользователях sa и других SQL, используете инфраструктуру для предоставления пользователям microsoft и всегда держите свой SQL-сервер, обновляя все необходимые исправления. Microsoft делает хорошую работу по разработке, тестированию и выпуску патчей, но это ваша работа по ее применению.

Найдите в amazon.com книги с хорошими отзывами об этом и купите его!

Ответ 8

Клавиатурные ускорители. После того, как вы выясните, какие запросы вы много пишете, напишите служебные хранимые процедуры для автоматизации задач и сопоставьте их с быстрыми клавишами. Например, в этой статье говорится о том, как избежать ввода "select top 10 * from SomeBigTable" каждый раз, когда вы хотите просто взглянуть на образцы данных из этой таблицы. У меня очень расширенная версия этой процедуры, отображаемая на CTRL + 5.
Еще несколько:

  • CTRL + 0: быстро script данные таблицы или определение proc, UDF или представления
  • CTRL + 9: найдите любой объект, чье имя содержит заданную строку (если вы знаете, что там есть процедура с "Option" в имени, но вы не знаете, с чего начинается ее имя)
  • CTRL + 7: найдите любой proc, UDF или представление, которое содержит заданную строку в коде
  • CTRL + 4: найдите все таблицы, у которых есть столбец с заданным именем

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

Ответ 9

Просто крошечный прямоугольный выбор ALT + DRAG пригодится для копирования + вставки вертикально выровненных списков столбцов (например, при ручном написании массивного UPDATE). Написание TSQL - это единственный раз, когда я его использую!

Ответ 10

Если вы перетащите из столбца обозревателя объектов node для таблицы, он помещает список столбцов CSV в окне запроса для вас

Ответ 11

Еще одна вещь, которая помогает повысить точность того, что я делаю, - это не совет студии управления, а один, использующий сам t-sql.

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

Примеры:

select t1.field1,t2.field2
--update t
--set field1 = t2.field2 
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

select t1.* 
--delete t1
from mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 = 'test'

(обратите внимание, что я использовал select * здесь только для иллюстрации, я бы обычно выбирал только несколько полей, которые мне нужны, чтобы увидеть, что запрос верен. Иногда мне может потребоваться увидеть поля из других таблиц в join, а также записи Я планирую удалить, чтобы убедиться, что соединение работает так, как я думал, что это будет)

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

select t1.field1,t2.field2
update t
set field1 = t2.field2 
--select t1.field1,t2.field2
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

Как вы можете видеть из приведенного выше примера, если вы раскомментируете выбор и забыли перекомпоновать его, просто обновите всю таблицу, а затем запустите выделение, когда вы решили запустить обновление. Кто-то просто сделал это в моем офисе на этой неделе, сделав так, чтобы на клиентские сайты мог войти только один человек из всех клиентов. Поэтому избегайте этого.

Ответ 12

Для вспомогательных запросов

object explorer > щелкните правой кнопкой таблицу table > Script как > SELECT в > Clipboard

Затем вы можете просто вставить в раздел, где вы хотите, чтобы это было как дополнительный запрос.

Шаблоны/фрагменты

Создайте собственные шаблоны только с фрагментом кода. Затем, открыв шаблон в качестве нового документа, просто перетащите его к текущему запросу, чтобы вставить фрагмент.

Фрагмент может быть просто набором заголовка с комментариями или просто некоторым простым фрагментом кода.

Неявные транзакции

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

Уровень изоляции

Перейдите к настройкам и установите уровень изоляции READ_UNCOMMITED по умолчанию. Таким образом вам не нужно вводить NOLOCK во все ваши специальные запросы. Просто не забудьте разместить подсказку таблицы при написании нового представления или хранимой процедуры.

База данных по умолчанию

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

Если вы хотите, чтобы он был другим, из-за проекта, над которым вы сейчас работаете.

В области "Зарегистрированные серверы" > Щелкните правой кнопкой мыши > Свойствa > вкладка Свойства подключения > подключиться к базе данных.

Несколько логинов

(Возможно, вы уже это сделали)

Зарегистрируйте сервер несколько раз, каждый с другим именем входа. Затем вы можете открыть один и тот же сервер в браузере объектов несколько раз (каждый с другим логином).

Чтобы выполнить тот же запрос, который вы уже писали с помощью другого входа, вместо копирования запроса просто сделайте правый щелчок по области запросa > Соединение > Изменить соединение.

Ответ 13

Используйте кнопку "Фильтр" в Проводнике объектов, чтобы быстро найти конкретный объект (таблицу, хранимую процедуру и т.д.) из частичного текста в имени или найти объекты, принадлежащие определенной схеме.

Ответ 14

Мне нравится настраивать сочетание клавиш CTRL + F1 как sp_helptext, так как это позволяет выделить хранимую процедуру и быстро просмотреть ее код. Я считаю, что это приятное дополнение к ярлыку ALT + F1 sp_help по умолчанию.

Ответ 15

У меня есть запланированная задача: каждую ночь записывать каждый файл (таблицу, sproc и т.д.) в файл. У меня есть индексирование полнотекстового поиска в выходной директории, поэтому, когда я ищу определенную строку (например, константу), которая похоронена где-то в БД, я могу очень быстро ее найти.

В Management Studio вы можете использовать команду Tasks > Generate Scrips..., чтобы увидеть, как это выполнить.

Ответ 16

Я предлагаю вам создавать стандарты для SQL-скриптов и придерживаться их. Также используйте шаблоны для быстрого создания различных типов хранимых процедур и функций. Вот вопрос о шаблонах в SQL Server 2005 Management Studio

Как создать шаблоны хранимых процедур SQL Server 2005 в SQL Server 2005 Management Studio?

Ответ 17

Отобразите Конструктор запросов с помощью CTRL + SHIFT + Q

Ответ 18

Я разработчик надстройки SSMSBoost, недавно выпущенной для SSMS2008/R2, предполагалось добавить функции добавления, ускоряющие повседневные задачи:

Shorcuts: F2 - (в редакторе SQL): script объект, находящийся нестрогий курсор

CTRL + F2 - (в редакторе SQL): найдите объект, расположенный под курсором в проводнике объектов, и сосредоточьте его + Он включает редактор ярлыков, отсутствующий в SSMS2008 (входит в SSMS2012)

Также SSMSBoost добавляет панель инструментов с кнопками:

  • Синхронизировать соединение SQL Editor с обозревателем объектов (фокусирует текущую базу данных в обозревателе объектов)
  • Управляйте своими собственными предпочтительными подключениями и переключайтесь между ними через комбинированное поле (включая переходы между серверами).
  • Автозамены: набрав " sel" заменит его на select * from, и вы также можете добавить свои парные пары замены токенов
  • и еще несколько полезных функций

SSMSBoost toolbar

Ответ 19

Используйте функции TRY/CATCH для обнаружения ошибок.

Adam Machanic Expert SQL Server 2005 Программирование - отличный ресурс для твердых методов и практик.

Используйте цепочку прав собственности для сохраненных процедур.

Использовать схемы для обеспечения безопасности и ролей данных.

Ответ 20

F5 для запуска текущего запроса - это легкий выигрыш, после этого, общие команды редактора MS CTRL + K + C, чтобы прокомментировать выбранный текст, а затем CTRL + K + U для расторжения.

Ответ 21

Используйте Object Explorer Details вместо объектного проводника для просмотра ваших таблиц, таким образом вы можете нажать букву и перенести ее в первую таблицу с префиксом этой буквы.

Ответ 22

Если вы работаете с разработчиками, часто получаете фрагмент кода, который отформатирован как одна длинная строка кода, а затем добавляет надстройку надстройки SQL для управления SQL Server. Studio может многое помочь с более чем 60 + вариантами форматирования. http://www.dpriver.com/sqlpp/ssmsaddin.html

Ответ 23

С помощью TAB в выделенном тексте будет отступ. Приятно легко организовать код в читаемом формате. Кроме того, SHIFT + TAB будет недействительным.

Ответ 24

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

Ответ 25

Devart 'SQL Complete express edition - это аддон SSMS и является бесплатным и полезным дополнением. Он обеспечивает очень необходимое форматирование кода и функции intellisense.

Я также использую аддон SSMSToolsPack, и это очень хорошо. Я люблю;

  • Это фрагменты SQL, в которых вы можете создавать короткие ключи для фрагментов кода и автоматически добавлять их при вводе этих ключей и нажимать клавишу ввода.
  • Поиск по истории, чтобы получить ваши запросы, которые вы запускали несколько месяцев назад, и забыл, сэкономил много времени.
  • Восстановить последний сеанс. Теперь я никогда не сохраняю свои запросы, если мне нужно просто перезапустить мои окна. Я просто нажимаю на восстановление последнего сеанса, и мой последний сеанс получает и восстанавливается, а соединение создается автоматически.
  • Создать инструкции вставки из результатов запроса (очень полезно). Просто полюбите этот аддон.

Недавно появился небольшой улов. SSMSToolsPack больше не является бесплатным для SSMS 2012. Он по-прежнему бесплатный для SSMS 2005 и SSMS 2008, пока еще. Используйте его только в том случае, если вы хотите купить его при переходе на SSMS 2012. В противном случае может быть хорошей идеей отучить его.

Ответ 26

  • ALT+SHIFT + Выбор

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

Ответ 27

Если вам нужно написать много sprocs для какого-либо API. Вам могут понравиться эти инструменты, которые я написал, когда был программистом. Скажем, у вас есть таблица из 200 столбцов, для которой нужно написать sproc для вставки/обновления, а другой - для удаления. Потому что вы не хотите, чтобы ваше приложение напрямую обращалось к таблицам. Просто часть декларации будет утомительной задачей, но если часть кода не будет написана для вас. Вот пример...

CREATE PROC upsert_Table1(@col1 int, @col2 varchar(200), @col3 float, etc.)
AS
BEGIN
  UPDATE table1 SET col1 = @col1, col2 = @col2, col3 = @col3, etc.
  IF @@error <> 0
    INSERT Table1 (col1, col2, col3, etc.)
    VALUES(@col1, @col2, @col3, etc.)
END
GO
CREATE PROC delete_Table1(@col1)
AS DELETE FROM Table1 WHERE col1 = @col1

http://snipplr.com/view/13451/spcoldefinition-or-writing-upsert-sp-in-a-snap/

Примечание. Вы также можете перейти к исходному коду и статье, написанной в 2002 году (теперь я чувствую себя старым!)
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=549&lngWId=5

Ответ 28

Я горячо рекомендую Red Gate SQL Prompt. Автоматическое обнаружение (intellisense на таблицах, хранимые процедуры, функции и собственные функции) - не что иное, как удивительный!:)

Он поставляется с ценой. Нет бесплатной версии этой вещи.

Ответ 29

Знание двух (?) разных типов окон, доступных в SQL Server Management Studio.

Если вы щелкните правой кнопкой мыши по таблице и выберите Open, она будет использовать редактируемую сетку, в которую вы можете изменить ячейки. Если вы щелкните правой кнопкой мыши базу данных и выберите New Query, она создаст немного другой тип окна что вы не можете изменить сетку, но она дает вам несколько других приятных функций, например, позволяет разделить фрагменты кода и позволить вам выполнять их отдельно по выбору.

Ответ 30

Используйте запрос SELECT INTO для быстрого/легкого создания резервных таблиц для работы и экспериментов.