Ms SQL Server написання запитів. Виконання SQL-запитів у Management Studio. Додавання обчислюваного поля Average

Табличними виразаминазиваються підзапити, що використовуються там, де очікується наявність таблиці. Існує два типи табличних виразів:

    похідні таблиці;

    узагальнені табличні вирази.

Ці дві форми табличних виразів розглядаються у наступних підрозділах.

Похідні таблиці

Похідна таблиця (derived table)- це табличний вираз, що входить у пропозицію FROM запиту. Похідні таблиці можна застосовувати в тих випадках, коли використання псевдонімів стовпців неможливо, оскільки транслятор SQL обробляє іншу пропозицію до того, як псевдонім стане відомим. У прикладі нижче показано спробу використовувати псевдонім стовпця у ситуації, коли інша пропозиція обробляється до того, як стане відомим псевдонім:

USE SampleDb; SELECT MONTH(EnterDate) як enter_month FROM Works_on GROUP BY enter_month;

Спроба виконати цей запит видасть таке повідомлення про помилку:

Msg 207, Level 16, State 1, Line 5 Invalid column name "enter_month". (Повідомлення 207: рівень 16, стан 1, рядок 5 Неприпустиме ім'я стовпця enter_month)

Причиною помилки є те, що пропозиція GROUP BY обробляється до обробки відповідного списку інструкції SELECT, і при обробці цієї групи псевдонім стовпця enter_month невідомий.

Цю проблему можна вирішити, використовуючи похідну таблицю, що містить попередній запит (без пропозиції GROUP BY), оскільки пропозиція FROM виконується перед пропозицією GROUP BY:

USE SampleDb; SELECT enter_month FROM (SELECT MONTH (EnterDate) як enter_month FROM Works_on) AS m GROUP BY enter_month;

Результат виконання цього запиту буде таким:

Зазвичай, табличний вираз можна розмістити в будь-якому місці інструкції SELECT, де може з'явитися ім'я таблиці. (Результатом табличного виразу завжди є таблиця або, в особливих випадках, вираз.) У прикладі нижче показано використання табличного виразу у списку вибору інструкції SELECT:

Результат виконання цього запиту:

Узагальнені табличні вирази

Узагальненим табличним виразом (OTB) (Common Table Expression - скорочено CTE)називається іменований табличний вираз, що підтримується мовою Transact-SQL. Узагальнені табличні вирази використовуються у двох типах запитів:

    нерекурсивних;

    рекурсивних.

Ці два типи запитів розглядаються в наступних розділах.

OTB та нерекурсивні запити

Нерекурсивну форму OTB можна використовувати як альтернативу похідним таблицям і уявленням. Зазвичай OTB визначається за допомогою пропозиції WITHта додаткового запиту, який посилається на ім'я, що використовується у пропозиції WITH. У мові Transact-SQL значення ключового слова WITH є неоднозначним. Щоб уникнути невизначеності, інструкцію, що передує оператору WITH, слід завершувати крапкою з комою.

USE AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005 ")/2.5;

Запит у цьому прикладі вибирає замовлення, чиї загальні суми податків (TotalDue) більші, ніж середнє значення з усіх податків, і плату перевезення (Freight) яких більше 40% середнього значення податків. Основною властивістю цього запиту є його об'ємність, оскільки вкладений запит потрібно писати двічі. Одним з можливих способівзменшити обсяг конструкції запиту буде створити уявлення, що містить вкладений запит. Але це рішення дещо складно, оскільки вимагає створення подання, а потім його видалення після закінчення запиту. Найкращим підходом буде створити OTB. У прикладі нижче показано використання нерекурсивного OTB, яке скорочує визначення запиту, наведеного вище:

USE AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE Total _2005 FROM price_calc) /2.5;

Синтаксис пропозиції WITH у нерекурсивних запитах має такий вигляд:

Параметр cte_name представляє ім'я OTB, яке визначає результуючу таблицю, а параметр column_list – список стовпців табличного виразу. (У прикладі вище OTB називається price_calc і має один стовпець - year_2005.) Параметр inner_query представляє інструкцію SELECT, яка визначає результуючий набір відповідного табличного виразу. Після цього певний табличний вираз можна використовувати у зовнішньому запиті outer_query. (Зовнішній запит у прикладі вище використовує OTB price_calc та її стовпець year_2005, щоб спростити вживаний двічі вкладений запит.)

OTB та рекурсивні запити

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

Параметри cte_name і column_list мають таке ж значення, як і OTB для нерекурсивних запитів. Тіло пропозиції WITH складається із двох запитів, об'єднаних оператором UNION ALL. Перший запит викликається лише один раз, і він починає накопичувати результат рекурсії. Перший операнд оператора UNION ALL не посилається на OTB. Цей запит називається опорним запитом чи джерелом.

Другий запит містить посилання на OTB і представляє її рекурсивну частину. Внаслідок цього він називається рекурсивним членом. У першому виклику рекурсивної частини посилання на OTB є результатом опорного запиту. Рекурсивний член використовує результат першого виклику запиту. Після цього система знову викликає рекурсивну частину. Виклик рекурсивного члена припиняється, коли попередній виклик повертає порожній результуючий набір.

Оператор UNION ALL з'єднує накопичені на Наразірядки, а також додаткові рядки додані поточним викликом рекурсивного члена. (Наявність оператора UNION ALL означає, що рядки, що повторюються, не будуть видалені з результату.)

Нарешті, outer_query визначає зовнішній запит, який використовує OTB для отримання всіх викликів об'єднання обох членів.

Для демонстрації рекурсивної форми OTB ми використовуємо таблицю Airplane, визначену та заповнену кодом, наведеним у прикладі нижче:

USE SampleDb; CREATE TABLE Airplane (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSERT INTO Airplane VALUES ("Літак", "Фюзеляж", 1, 10); INSERT INTO Airplane VALUES ("Літак", "Крила", 1, 11); INSERT INTO Airplane VALUES ("Літак", "Хвіст", 1, 12); INSERT INTO Airplane VALUES ("Фюзеляж", "Салон", 1, 13); INSERT INTO Airplane VALUES ("Фюзеляж", "Кабіна", 1, 14); INSERT INTO Airplane VALUES ("Фюзеляж", "Ніс", 1, 15); INSERT INTO Airplane VALUES ("Салон", NULL, 1,13); INSERT INTO Airplane VALUES ("Кабіна", NULL, 1, 14); INSERT INTO Airplane VALUES ("Ніс", NULL, 1, 15); INSERT INTO Airplane VALUES ("Крила", NULL,2, 11); INSERT INTO Airplane VALUES ("Хвіст", NULL, 1, 12);

Таблиця Airplane складається із чотирьох стовпців. Стовпець ContainingAssembly визначає складання, а стовпець ContainedAssembly - частини (одна за одною), які становлять відповідне складання. На малюнку нижче наведено графічну ілюстрацію можливого виду літака та його складових частин:

Таблиця Airplane складається з наступних 11 рядків:

У прикладі нижче показано застосування пропозиції WITH для визначення запиту, який обчислює загальну вартість кожної збірки:

USE SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL(6,2) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Деталь", quantity "Кількість", cost "Ціна" FROM list_of_parts;

Пропозиція WITH визначає список OTB з ім'ям list_of_parts, що складається з трьох стовпців: assembly1, quantity та cost. Перша інструкція SELECT у прикладі викликається лише один раз, щоб зберегти результати першого кроку процесу рекурсії. Інструкція SELECT в останньому рядку прикладу відображає наступний результат.

Мова SQL або Structured Query Language (мова структурованих запитів) призначена для управління даними в системі реляційних баз даних (RDBMS). У цій статті буде розказано про часто використовувані командах SQL, з якими має бути знайомий кожен програміст. Цей матеріал ідеально підійде для тих, хто хоче освіжити знання про SQL перед співбесідою на роботу. Для цього розберіть наведені в статті приклади та згадайте, що проходили на парах баз даних.

Зверніть увагу, що в деяких системах баз даних потрібно вказувати точку з комою наприкінці кожного оператора. Крапка з комою є стандартним покажчикомна кінець кожного оператора SQL. У прикладах використовується MySQL, тому точка з комою потрібна.

Налаштування бази даних для прикладів

Створіть базу для демонстрації роботи команд. Для роботи вам знадобиться завантажити два файли: DLL.sql і InsertStatements.sql. Після цього відкрийте термінал і увійдіть в консоль MySQL за допомогою наступної команди (стаття передбачає, що MySQL вже встановлений у системі):

Mysql -u root -p

Потім введіть пароль.

Виконайте наступну команду. Назвемо базу даних «university»:

CREATE DATABASE university; USE university; SOURCE ; SOURCE

Команди для роботи з базами даних

1. Перегляд доступних баз даних

SHOW DATABASES;

2. Створення нової бази даних

CREATE DATABASE;

3. Вибір бази даних для використання

USE ;

4. Імпорт SQL-команд із файла.sql

SOURCE ;

5. Видалення бази даних

DROP DATABASE ;

Робота з таблицями

6. Перегляд таблиць, доступних у базі даних

SHOW TABLES;

7. Створення нової таблиці

CREATE TABLE ( , , PRIMARY KEY ( ), FOREIGN KEY ( ) REFERENCES ());

Обмеження цілісності під час використання CREATE TABLE

Може знадобитися створити обмеження для певних стовпців у таблиці. Під час створення таблиці можна задати такі обмеження:

  • осередок таблиці не може мати значення NULL;
  • первинний ключ - PRIMARY KEY (col_name1, col_name2, …);
  • зовнішній ключ - FOREIGN KEY (col_namex1, …, col_namexn) REFERENCES table_name (col_namex1, …, col_namexn) .

Можна встановити більше одного первинного ключа. В цьому випадку вийде складовий первинний ключ.

приклад

Створіть таблицю "instructor":

CREATE TABLE instructor (ID CHAR(5), name VARCHAR(20) NOT NULL, dept_name VARCHAR(20), salary NUMERIC(8,2), PRIMARY KEY (ID), FOREIGN KEY (dept_name) REFERENCES department(dept_name));

8. Відомості про таблицю

Можна переглянути різні відомості (тип значень, є ключем чи ні) про стовпці таблиці наступною командою:

DESCRIBE ;

9. Додавання даних до таблиці

INSERT INTO (, , , …) VALUES ( , , , …);

При додаванні даних до кожного стовпця таблиці не потрібно вказувати назви стовпців.

INSERT INTO VALUES ( , , , …);

10. Оновлення даних таблиці

UPDATE SET = , = ... WHERE ;

11. Видалення всіх даних із таблиці

DELETE FROM ;

12. Видалення таблиці

DROP TABLE ;

Команди для створення запитів

13. SELECT

SELECT використовується для отримання даних із певної таблиці:

SELECT , , … FROM ;

Наступною командою можна вивести всі дані з таблиці:

SELECT * FROM ;

14. SELECT DISTINCT

У стовпцях таблиці можуть міститися дані, що повторюються. Використовуйте SELECT DISTINCT для отримання неповторних даних.

SELECT DISTINCT , , … FROM ;

15. WHERE

Можна використовувати ключове слово WHERE у SELECT для вказівки умов у запиті:

SELECT , , … FROM WHERE ;

У запиті можна задавати такі умови:

  • порівняння тексту;
  • порівняння чисельних значень;
  • логічні операції AND (і), OR (або) та NOT (заперечення).

приклад

Спробуйте виконати такі команди. Зверніть увагу на умови, задані у WHERE:

SELECT * FROM course WHERE dept_name='Comp. Sci.’; SELECT * FROM course WHERE credits>3; SELECT * FROM course WHERE dept_name="Comp. Sci." AND credits>3;

16. GROUP BY

Оператор GROUP BY часто використовується з агрегатними функціями, такими як COUNT , MAX , MIN , SUM та AVG для групування вихідних значень.

SELECT , , … FROM GROUP BY ;

приклад

Виведемо кількість курсів для кожного факультету:

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name;

17. HAVING

Ключове слово HAVING було додано до SQL тому, що WHERE не може бути використане для роботи з агрегатними функціями.

SELECT , , ... FROM GROUP BY HAVING

приклад

Виведемо список факультетів, які мають більше одного курсу:

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name HAVING COUNT(course_id)>1;

18. ORDER BY

ORDER BY використовується для сортування результатів запиту зі спадання або зростання. ORDER BY відсортує за зростанням, якщо не буде вказано спосіб сортування ASC або DESC.

SELECT , , … FROM ORDER BY , , … ASC | DESC;

приклад

Виведемо список курсів щодо зростання та зменшення кількості кредитів:

SELECT * FROM course ORDER BY credits; SELECT * FROM course ORDER BY credits DESC;

19. BETWEEN

BETWEEN використовується для вибору значень даних із певного проміжку. Можуть бути використані числові та текстові значення, і навіть дати.

SELECT , , … FROM WHERE BETWEEN AND ;

приклад

Виведемо список інструкторів, чия зарплата більша за 50 000, але менша за 100 000:

SELECT * FROM instructor WHERE salary BETWEEN 50000 AND 100000;

20. LIKE

Оператор LIKE використовується WHERE , щоб задати шаблон пошуку схожого значення.

Є два вільні оператори, які використовуються в LIKE:

  • % (жоден, один або кілька символів);
  • _ (один символ).
SELECT , , … FROM WHERE LIKE ;

приклад

Виведемо список курсів, в імені яких міститься «to», та список курсів, назва яких починається з «CS-»:

SELECT * FROM course WHERE title LIKE '%to%'; SELECT * FROM course WHERE course_id LIKE "CS-___";

21. IN

За допомогою IN можна вказати кілька значень для оператора WHERE:

SELECT , , … FROM WHERE IN ( , , …);

приклад

Виведемо список студентів із напрямків Comp. Sci., Physics та Elec. Eng.:

SELECT * FROM student WHERE dept_name IN ( 'Comp. Sci.', 'Physics', 'Elec. Eng.');

22. JOIN

JOIN використовується для зв'язку двох або більше таблиць за допомогою загальних атрибутів усередині них. На зображенні нижче показано різні способиоб'єднання SQL. Зверніть увагу на різницю між лівим зовнішнім об'єднанням та правим зовнішнім об'єднанням:

SELECT , , … FROM JOIN ON = ;

Приклад 1

Виведемо список усіх курсів та відповідну інформацію про факультети:

SELECT * FROM course JOIN department ON course.dept_name=department.dept_name;

Приклад 2

Виведемо список усіх обов'язкових курсів та деталі про них:

SELECT prereq.course_id, title, dept_name, credits, prereq_id FROM prereq LEFT OUTER JOIN course ON prereq.course_id=course.course_id;

Приклад 3

Виведемо список усіх курсів незалежно від того, обов'язкові вони чи ні:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq RIGHT OUTER JOIN course ON prereq.course_id=course.course_id;

23. View

View - це віртуальна таблиця SQL, створена результаті виконання висловлювання. Вона містить рядки та стовпці і дуже схожа на звичайну SQL-таблицю. View завжди показує найсвіжішу інформацію з бази даних.

створення

CREATE VIEW AS SELECT , , … FROM WHERE ;

Вилучення

DROP VIEW ;

приклад

Створимо view, що складається з курсів із 3 кредитами:

24. Агрегатні функції

Ці функції використовуються для отримання сукупного результату, що відноситься до даних, що розглядаються. Нижче наведено загальновживані агреговані функції:

  • COUNT (col_name) – повертає кількість рядків;
  • SUM (col_name) – повертає суму значень у даному стовпці;
  • AVG (col_name) – повертає середнє значення даного стовпця;
  • MIN (col_name) – повертає найменше значення даного стовпця;
  • MAX (col_name) – повертає найбільше значення даного стовпця.

25. Вкладені підзапити

Вкладені підзапити - це SQL-запити, які включають вирази SELECT , FROM і WHERE , що вкладені в інший запит.

приклад

Знайдемо курси, які викладалися восени 2009 та навесні 2010 років:

SELECT DISTINCT course_id FROM section WHERE semester = 'Fall' AND year= 2009 AND course_id IN (SELECT course_id FROM section WHERE semester = 'Spring' AND year= 2010);

SQL - Структурована Мова Запитів.
У цьому огляді ми розглянемо найпоширеніші види SQL-запитів.
Стандарт SQL визначається ANSI(Американським Національним Інститутом Стандартів).
SQL - це мова, орієнтована спеціально на реляційні бази даних.

Поділ SQL:


DDL
(Мова Визначення Даних) — так звана Мова Опису Схеми в ANSI, складається з команд, які створюють об'єкти (таблиці, індекси, перегляди тощо) у базі даних.
DML(Мова Маніпулювання Даними) - це набір команд, які визначають, які значення представлені в таблицях у будь-який момент часу.
DCD(Мова Управління Даними) складається із засобів, які визначають, дозволити користувачеві виконувати певні дії чи ні. Вони є складовими частинами DDL у ANSI. Не забувайте про ці імена. Це не різні мови, а розділи команд SQL згрупованих за їх функціями.

Типи даних:

SQL Server - Типи даних

Опис

bigint (int 8)

bigint (int 8)

binary(n)

binary(n) або image

character
(синонім char)

national characterабо ntext

character varying(синонім char varying varchar)

national character varyingабо ntext

Datetime

datetime

decimal

він же numeric

double precision

double precision

integer (int 4) (Синонім: int)

integer (int 4)

national character(Синонім: national character, nchar)

national character

Numeric(синініми: decimal, dec)

national character varying(синоніми: national char varying, nvarchar)

National character varying

Smalldatetime

datetime

smallint (int 2)

smallint (int 2)

Smallmoney

sql_variant

Більше не тремтить

Ntext
Починаючи з SQL Server 2005, не рекомендується для використання.

Timestamp

Не тремтить

tinyint (int 1)

tinyint (int 1)

Uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n) або image

smalldatetime

datetime

smallint (int 2)

smallint (int 2)

smallmoney

sql_variant

Не підтримується

timestamp

Не підтримується

tinyint (int 1)

tinyint (int 1)

uniqueidentifier

uniqueidentifier

varbinary(n)

varbinary(n) або image

Таблиця типів даних у SQL Server 2000

ЩО ТАКЕ ЗАПИТ?

Запиткоманда, яку ви даєте вашій програмі бази даних. Запити є частиною мови DML. Всі запити SQL складаються з одиночної команди. Структура цієї команди оманливо проста, тому що ви повинні розширювати її так, щоб виконати високо складні оцінки та обробки даних.

Команда SELECT:

SELECT“Вибір” - найчастіше використовувана команда, з її йде вибірка даних із таблиці.
Вигляд запиту із застосуванням SELECT:

SELECT id, user_name, city, birth_day FROM users_base;

Такий запит виведе з таблиці users_base всі значення стовпців вказаних через кому після команди SELECT. Також можна виводити всі стовпці одним символом, тобто. SELECT * FROM users_base; - такий запит виведе усі дані із таблиці.

Структура команди SELECT:

SELECT (Імена стовпців через кому які необхідно вивести в запиті) FROM (ім'я таблиці в базі даних)
- це найпростіший вид запиту. Існують додаткові команди для зручності отримання даних (див. далі “Функції”)

DML команди:

Значення можуть бути поміщені та видалені з полів, трьома командами мови DML (Мова маніпулювання даними):
INSERT(Вставка)
UPDATE(Оновлення, модифікація),
DELETE(Видалення)

Команда INSERT:

INSERT INTO users_base (user_name, city, birth_day) VALUES ('Олександр', 'Ростов', '20.06.1991');

Команда INSERT йде разом з приставкою INTO (in to - в), далі в дужках йдуть імена стовпців, в які ми повинні вставити дані, далі йде команда VALUES (значення) і в дужках по черзі йдуть значення (обов'язково потрібно дотримуватися черговості значень зі стовпцями , значення повинні йти в тій же черговості, як і стовпці, вказані вами).

Команда UPDATE:

UPDATE users_base SET user_name = 'Олексій';

Команда UPDATE оновлює значення таблиці. Спочатку йде сама команда UPDATE потім ім'я таблиці, після команда SET (встановить) далі ім'я стовпця та його значення в лапках (лапки ставляться в тому випадку якщо значення має string формат, якщо це числове значення та стовпець не прив'язаний до типу даних vchar та будь-яких інших рядкових типів, то лапки не мають сенсу.)

Команда DELETE:

DELETE FROM users_base WHERE user_name = 'Василь';

Команда DELETE видаляє рядок повністю, визначає рядок за критерієм WHERE (Де). В даному випадку цей запит видалив би всі рядки, в яких значення стовпця user_name було б Василем. Про критерії WHERE та інших ми поговоримо трохи згодом.

Критерії, функції, умови тощо. що допомагає нам у SQL:

WHERE - пропозиція команди SELECT та інших DML команд, яка дозволяє вам встановлювати предикати, умова яких може бути або вірною або невірною для будь-якого рядка таблиці. Команда витягує лише рядки з таблиці, котрим таке твердження правильне.
Приклад:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Олексій';- такий запит виведе лише ті рядки, які будуть відповідати умові WHERE, а саме всі рядки, у яких стовпець user_name має значення Олексій.

ORDER BY – умова для сортування вибраних рядків. Має 2 критерії ASC та DESC. ASC (сортування від А до Я або від 0 до 9)

DESC (протилежно від ASC).
Приклад:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - такий запит виведе значення відсортовані стовпцем user_name від А до Я (A-Z; 0-9)

Також цю умову можна використовувати разом із умовою WHERE.
Приклад:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Олексій' ORDER BY id ASC;

DISTINCT (Відмінний) – аргумент, який забезпечує вас способом усувати подвійні значення з вашої пропозиції SELECT. Тобто. якщо у вас є повторні значення в стовпці, припустимо, user_name то DISTINCT виведе вам тільки одне, наприклад у вас в базі є 2 особи на ім'я Олексій, то запит з використанням функції DISTINCT виведе вам тільки 1 значення, яке зустріне першим...
Приклад:
SELECT DISTINCT user_name FROM users_base;- такий запит виведе нам значення всіх записів у стовпці user_name але вони повторюватимуться, тобто. якщо ви мали нескінченну кількість значень, що повторюються, то вони показані не будуть…

AND - бере два Булі (у формі A AND B) як аргументи і оцінює їх по відношенню до істини, чи вони вірні обидва.
Приклад:
SELECT * FROM users_base WHERE city = 'Ростов' AND user_name = 'Олександр';- виведе всі значення з таблиці, де в одному рядку зустрічається назва міста (в даному випадку Ростов та ім'я користувача Олександр).

OR - бере два Булі (у формі A OR B) як аргументи і оцінює на правильність, чи вірний один із них.

SELECT * FROM users_base WHERE city = 'Ростов' OR user_name = 'Олександр';- виведе всі значення з таблиці, де у рядку зустрічається назва міста Ростов або Ім'я користувача Олександр.

NOT - бере одиночний Булев (у формі NOT A) як аргументи та замінює його значення з невірного на вірне чи вірне на невірне.
SELECT * FROM users_base WHERE city = 'Ростов' OR NOT user_name = 'Олександр';- виведе всі значення з таблиці де в одному рядку зустрінеться ім'я міста Ростов або ім'я користувача не буде Олександр.

IN - визначає набір значень, у яке дане значення може або не може бути включене.
SELECT * FROM users_base WHERE city IN (Владивосток, Ростов);- такий запит виведе всі значення з таблиці, у яких зустрінуться найменування зазначених міст у стовпці city

Between – схожий на оператор IN. На відміну від визначення номерів з набору, як це робить IN, BETWEEN визначає діапазон, значення якого повинні зменшуватися що робить предикат вірним.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10;- виводить усі значення з таблиці, які будуть знаходитися в діапазоні від 1 до 10 у стовпці id

COUNT - здійснює номери рядків або не NULL значення полів, які вибрали запит.
SELECT COUNT (*) FROM users_base ;- виведе кількість рядків у цій таблиці.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- виведе кількість рядків з іменами користувачів (не повторюваних)

SUM - здійснює арифметичну суму всіх вибраних значень даного поля.
SELECT SUM (id) FROM users_base;- Виведе суму значень всіх рядків стовпця id.

AVG - робить усереднення всіх вибраних значень цього поля.
SELECT AVG (id) FROM users_base;- виведе середнє значення всіх вибраних значень стовпця id

MAX – виробляє найбільше з усіх вибраних значень даного поля.

MIN - виробляє найменше зі всіх обраних значень даного поля.

Створення таблиць:

CREATE TABLE users_base (id integer, user_name text, city text, birth_day datetime);- Виконання такої команди призведе до створення таблиці, за якою я наводив приклади ... Тут все просто, пишемо команду CREATE TABLE далі ім'я таблиці, яку хочемо створити, далі в дужках через кому імена стовпців та їх тип даних. Це стандартний вид створення таблиці SQL. Зараз я наведу приклад створення таблиць SQL Server 2005:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (

NOT NULL,
NOT NULL,
NOT NULL,
PRIMARY KEY CLUSTERED
ASC


END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON TEXTIMAGE_ON
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") AND type in (N"U"))
BEGIN
CREATE TABLE. (
IDENTITY(1,1) NOT NULL,
NULL,
NULL,
PRIMARY KEY CLUSTERED
ASC
)WITH (IGNORE_DUP_KEY = OFF) ON
) ON
END

Синтаксис в SQL Server 2005 це вже інша тема, я просто хотів показати, що я описав основи SQL програмування, до вершин ви зможете дійти самі знаючи основи.

При виникненні питань на цю тему, пишіть мені на мило

Розробити програму, яка демонструє основні операції над даними в базі даних типу MS SQL Server, а саме:

  • підключення бази даних до програми;
  • відображення таблиць бази даних на формі;
  • додавання нового записудо бази даних;
  • редагування запису;
  • видалення запису.

За основу взято базу даних Education.dbo, процес створення якої докладно описується

На малюнку 1 відображено структуру бази даних Education.dbo. Як видно з малюнка, база даних називається:

sasha-pc\sqlexpress.Education.dbo

Тут sasha-pc - ідентифікатор комп'ютера в мережі, sqlexpress - назва сервера баз даних, Education.dbo - назва бази даних.

Мал. 1. База даних Education.dbo

База даних містить дві таблиці: Student та Session. Структура таблиць така.

Таблиця Student.

Таблиця Session.

Виконання

1. Створити новий проектв MS Visual Studio як Windows Forms Application.

Створити новий проект типу Windows Forms Application. Приклад створення нового проекту докладно описується

2. Створення нового уявлення (view) для відображення даних таблиці Student.

Для відображення даних таблиць бази даних можна використовувати різні способи. Один з них - це створення уявлень (views), які формуються засобами MS Visual Studio.

У нашому випадку дані таблиць відображатимуться на формі в елементі керування типу DataGridView. Після створення уявлень дуже зручно їх зв'язати з елементами DataGridView .

Для створення уявлення потрібно викликати команду «Add New View» з контекстного меню, яке викликається кліком правою кнопкою мишки на елементі «Views» бази даних Education.dbo (рисунок 2).

Мал. 2. Виклик команди додавання нового уявлення

В результаті відкриється вікно "Add Table" (рисунок 3). У вікні потрібно вибрати таблиці, які додаються до подання.

Мал. 3. Вибір таблиць, на яких базуватиметься нове подання

У нашому випадку вибираємо таблицю Student та підтверджуємо свій вибір кліком на кнопці Add. Наступним кроком потрібно закрити вікно вибором кнопки Close.

Після виконання дій буде сформовано вікно, в якому потрібно вибрати поля, які повинні відображатися в поданні (на формі). Вибираємо усі поля (рисунок 4).

При виборі полів у верхній частині робочої області відображаються поля таблиці Student . За допомогою мишки можна вибирати потрібні поля для подання.

Відповідно, в середній області вікна відображаються назви вибраних полів, таблиця в якій вони є (див. рис. 4), можливість сортування, фільтрування та інше.

У нижній частині області відображається відповідний текст SQL-запиту, який використовується для створення подання.

Мал. 4. Вибір полів таблиці Student для їх відображення у поданні

Після вибору команди

File->Save All File->Save View1

Відкриється вікно, в якому потрібно вказати ім'я подання. Задаємо ім'я "View Student" (рисунок 5).

Мал. 5. Вказівка ​​імені для подання

Після виконаних дій, вікно подання матиме вигляд як показано на малюнку 6.

Мал. 6. Подання View Student у базі даних

Тепер можна розміщувати елемент керування DataGridView та пов'язувати його з поданням.

3. Розміщення елемента керування DataGridView та налаштування зв'язку з базою даних.

Перед розміщенням елемента керування DataGridView необхідно перейти в режим проектування форми "Form1.cs".

Елемент DataGridView є таблицею, яка може відображати дані. Цей елемент керування розміщується на панелі ToolBox . Спочатку трохи коригуємо розміри форми, а потім розміщуємо на ній елемент керування DataGridView (рисунок 7). В результаті буде створено екземпляр об'єкта з ім'ям dataGridView1 за промовчанням.

Мал. 7. Елемент управління DataGridView та вікно вибору джерела даних

Після розміщення елемента керування типу DataGridView на формі у верхньому правому куті можна вибрати налаштування джерела даних. Відповідно відкриється вікно "DataGridView Tasks". У цьому вікні потрібно вибрати меню «Choose Data Source».

У меню вибирається команда «Add Project Data Source…» (рис. 7). Після цього відкривається вікно майстра, у якому послідовно вибирається джерело даних.

На малюнку 8 показано вікно « Data Source Configuration Wizard«В якому вибирається тип джерела даних. У нашому випадку встановлюємо "Database".

Мал. 8. Вибір типу джерела даних

У наступному вікні (Рисунок 9) вибирається модель джерела даних. Потрібно вибрати DataSet.

Мал. 9. Вибір моделі джерела даних

У вікні, зображеному малюнку 10 , потрібно встановити з'єднання даних, що потрібно використовуватиме підключення до бази даних. У нашому випадку потрібно вибрати базу даних sasha-pc\sqlexpress\Education.dbo«.

Мал. 10. Вибір з'єднання даних

У наступному вікні (малюнок 11) пропонується зберегти рядок з'єднання Connection String до конфігураційного файлу програми. Залишаємо все як є і переходимо до наступного вікна.

Мал. 11. Пропозиція збереження рядка з'єднання з базою даних Connection String у конфігураційному файлі програми

Після створення з'єднання з базою даних з'являється безліч об'єктів бази даних (рисунок 12). У нашому випадку потрібно вибрати уявлення «View Student» та всі поля з нього. Зазначені поля відображатимуться в компоненті типу DataGridView.

Мал. 12. Вибір об'єктів бази даних, які потрібно відображати у DataGridView

Після вибору кнопки Finish будуть відображені вибрані об'єкти (подання View Student) бази даних Education.dbo (рисунок 13).

Мал. 13. Елемент керування типу DataGridView з вибраними полями уявлення View Student

Так само можна налаштувати уявлення, які містять будь-які поля з будь-яких таблиць бази даних. Також в одному поданні можуть відображатися поля різних таблиць.

4. Налаштування виду елемента керування типу DataGridView.

Якщо запустити додаток виконання, будуть отримані дані представлення View Student , яке відповідає таблиці Student бази даних (рисунок 14).

Мал. 14. Запуск програми виконання

Як видно з рисунку 14, дані таблиці dataGridView1 відображаються нормально, але оформлення можна скоригувати.

Елемент керування типу DataGridView дозволяє коригувати види полів, які відображаються.

Для виклику команд редагування полів достатньо викликати контекстне меню кліком правою кнопкою мишки на елементі керування dataGridView1 .

У меню існують різні корисні команди, які дозволяють керувати видом та роботою DataGridView :

  • команда блокування елемента управління (Lock Controls);
  • команда редагування полів, які відображаються у поданні (Edit Columns…);
  • команда додавання нових полів, наприклад обчислюваних (Add Column).

У нашому випадку необхідно вибрати команду «Edit Columns…» (рис. 15).

Мал. 15. Команда "Edit Columns ..." з контекстного меню

В результаті відкриється вікно "Edit Columns", в якому можна налаштувати вид полів уявлення на власний смак (рисунок 16).

Мал. 16. Вікно налаштування виду полів у поданні "View Student"

У вікні малюнку 16 для будь-якого поля можна налаштувати назву, вирівнювання, ширину, можливість редагування даних тощо.

5. Рядок Connection String

Для того, щоб до бази даних вносити зміни, потрібно отримати рядок з'єднання з базою даних Connection String .

Існують різні способи одержання рядка з'єднання з базою даних. Один із них базується на читанні цього рядка у вікні Properties бази даних Education.dbo (рис. 17).

Мал. 17. Визначення рядка Connection String

Для збереження рядка у програмі вводиться внутрішня змінна типу string. За допомогою буфера обміну копіюємо рядок Connection String в описану змінну типу string.

У тексті файлу «Form1.cs» на початку опису класу Form1 треба описати змінну:

string conn_string =;

На даний момент текст класу Form1 наступний:

public partial class Form1 : Form { string conn_string = @"Data Source=(local)\SQLEXPRESS;Initial Catalog=Education;Integrated Security=True;Pooling=False"; Public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: Ця лінія code loads data в "educationDataSet.View_Student" table. Ви можете move, або remove it, as needed. } }

6. Створення нової формидля демонстрації команд маніпулювання даними.

Для того, щоб мати можливість обробляти дані поточного запису, потрібно створити нову форму. Процес створення нової форми в MS Visual Studio - C # детально описується.

Додавання нової форми здійснюється командою:

Project -> Add Windows Form...

У вікні "New Item" потрібно вибрати елемент "Windows Form".

Ім'я файлу нової форми залишаємо за умовчанням "Form2.cs".

На малюнку 18 зображено вигляд нової форми.

Розміщуємо на формі елементи керування наступних типів:

  • два елементи керування типу Button (кнопки OK та Cancel). Відповідно буде отримано два об'єкти з іменами button1 і button2;
  • чотири елементи керування типу Label для створення інформаційних повідомлень;
  • чотири елементи керування типу TextBox для введення даних у полях Num_book, Name, Group, Year.

Потрібно налаштувати такі властивості елементів керування:

  • в елементі управління button1 властивість Text = "OK";
  • в елементі управління button2 властивість Text = "Cancel";
  • в елементі керування button1 властивість DialogResult = "OK";
  • в елементі управління button2 властивість DialogResult = "Cancel";
  • в елементі управління label1 властивість Text = "Num_book";
  • в елементі управління label2 властивість Text = "Name";
  • в елементі управління label3 властивість Text = "Group";
  • в елементі управління label4 властивість Text = "Year".

Також налаштовуємо видимість елементів керування типу TextBox. Для цього у всіх елементах керування textBox1, textBox2, textBox3, textBox4 значення властивості Modifiers = "public".

Мал. 18. Вид новоствореної форми

7. Додавання кнопок виклику команд маніпулювання даними таблиці Student.

Для подальшої роботи потрібно за допомогою мишки перейти на головну форму Form1 .

На головну форму програми Form1 додаємо три кнопки (Button). Автоматично буде створено три змінні-об'єкти з іменами button1, button2, button3. У кожній із цих кнопок вносимо такі налаштування (вікно Properties):

  • у кнопці button1 властивість Text = «Insert …» (вставити запис);
  • у кнопці button2 властивість Text = «Edit …» (змінити запис);
  • в кнопці button3 властивість Text = "Delete".

В результаті внесених змін головна форма матиме вигляд, як показано на малюнку 19.

Мал. 19. Головна форма програми

8. Програмування події кліка на кнопці "Insert ...".

Обробник події кліка на кнопці «Insert…» має вигляд:

private void button1_Click_1(object sender, EventArgs e) { string cmd_text; Form2 f2 = новий Form2 (); if (f2.ShowDialog() == DialogResult .OK) { cmd_text = "INSERT INTO Student VALUES (" + """ + f2.textBox1.Text + "" , "" + f2.textBox2.Text + "", "" + f2.textBox3.Text + "" , " + f2.textBox4.Text + ")"; // Створити з'єднання з базою даних SqlConnection sql_conn = новий SqlConnection (conn_string); // Створити команду на мові SQL SqlCommand sql_comm = New SqlCommand (cmd_text, sql_conn); sql_conn.Open(); // відкрити з'єднання sql_comm.ExecuteNonQuery(); // Виконати команду на мові SQL sql_conn.Close(); // Закрити з'єднання this .view_StudentTableAdapter.Fill(this .educationDataSet.View_Student); } }

Спочатку викликається форма Form2. Після отримання результату «OK» (натискання відповідної кнопки) у формі Form2 заповнені поля в елементах типу TextBox включаються до рядка SQL-запиту. SQL -запит додавання нового рядка має вигляд:

INSERT INTO Student VALUES (value1, value2, value3, value4)

де value1 відповідає номеру залікової книжки; value2 – прізвище студента; value3 – група, у якій навчається студент; value4 – рік вступу.

Рядок з'єднання з базою даних Connection String описується змінною conn_string (див. п. 5). Об'єкт класу SqlConnection з'єднує програму з джерелами даних. Крім того, клас Connection вирішує завдання аутентифікації користувачів, роботу з мережами, ідентифікацію баз даних, буферизацію з'єднань та обробку транзакцій.

Команда на мові SQL, що додає запис до таблиці, інкапсульована в класі SqlCommand. Конструктор класу SqlCommand приймає два параметри: рядок запиту на мові SQL (змінна cmd_text) та об'єкт класу SqlConnection.

Метод ExecuteNonQuery() реалізований в інтерфейсі IDBCommand. Метод реалізує SQL-команди, які не повертають дані. До таких команд відносяться команди INSERT , DELETE , UPDATE а також процедури, що зберігаються, які не повертають даних. Метод ExecuteNonQuery() повертає кількість задіяних записів.

9. Програмування події натискання на кнопці «Edit…».

Обробник події кліка на кнопці «Edit…» має вигляд:

private void button2_Click(object sender, EventArgs e) ( string cmd_text; Form2 f2 = новий Form2 (); int index; string num_book; index = dataGridView1.CurrentRow.Index; num_book = Convert .ToString(dataGridView1. .Text = num_book; f2.textBox2.Text = Convert .ToString(dataGridView1.Value); if (f2.ShowDialog() == DialogResult .OK) ( cmd_text = "UPDATE Student SET Num_book = ""+ f2.textBox1.Text + "", " + " = "" + f2.textBox2.Text + "", " + " = "" + f2.textBox3.Text + "", " + "Year = " + f2 .textBox4.Text + "WHERE Num_book = "" + num_book + """ ; sql_conn.Close(); це .view_StudentTableAdapter.Fill(this .educationDataSet.View_Student) )

У цьому обробнику виконується SQL-команда UPDATE, яка змінює поточне значення активного запису.

10. Програмування події кліка на кнопці "Delete".

Обробник події кліка на кнопці «Delete» має вигляд:

private void button3_Click(object sender, EventArgs e) ( string cmd_text = "DELETE FROM Student" ; int index; string num_book; index = dataGridView1.CurrentRow.Index; num_book = Convert.ToString(dataGridView1.Value) "DELETE FROM Student WHERE . = ""+ num_book + """ ; SqlConnection sql_conn = новий SqlConnection (conn_string); Fill (this .educationDataSet.View_Student);

У цьому обробнику виконується SQL-команда видалення запису DELETE.

Пов'язані теми

  • Виведення таблиці бази даних Microsoft Access

Середовище SQL Server Management Studio забезпечує завершений засіб для створення всіх типів запитів. З її допомогою можна створювати, зберігати, завантажувати та редагувати запити. Крім цього, над запитами можна працювати без підключення до сервера. Цей інструмент також дозволяє розробляти запити для різних проектів.

Надається можливість працювати із запитами як за допомогою редактора запитів, так і за допомогою браузера рішень. У цій статті розглядаються обидва ці інструменти. Крім цих двох компонентів середовища SQL Server Management Studio, ми розглянемо налагодження SQL-коду, використовуючи вбудований наладчик.

Редактор запитів

Щоб відкрити панель редактора запитів Query Editor (Редактор запитів), на панелі інструментів середовища SQL Server Management Studio натисніть кнопку New Query (Створити запит). Цю панель можна розширити, щоб відобразити кнопки створення всіх можливих запитів, а не лише запитів компонента Database Engine. За замовчуванням створюється новий запиткомпонента Database Engine, але, натиснувши відповідну кнопку на панелі інструментів, можна також створювати запити MDX, XMLA та ін.

Рядок стану внизу панелі редактора запитів вказує на статус підключення редактора до сервера. Якщо підключення до сервера не здійснено автоматично, під час запуску редактора запитів відображається діалогове вікно підключення до сервера, в якому можна вибрати сервер для підключення та режим автентифікації.

Редагування запитів в автономному режимі надає більше гнучкості, ніж під час підключення до сервера. Для редагування запитів не обов'язково підключатися до сервера, і вікно редактора запитів можна відключити від одного сервера (виконавши команду меню Query -> Connection -> Disconnect) і підключити до іншого, не відкриваючи іншого вікна редактора. Щоб вибрати автономний режим редагування, у діалоговому вікні підключення до сервера, що відкривається під час запуску редактора конкретного видузапитів, просто натисніть кнопку Cancel (Скасувати).

Редактор запитів можна використовувати для виконання наступних завдань:

    створення та виконання інструкцій мови Transact-SQL;

    збереження створених інструкцій мови Transact-SQL у файл;

    створення та аналізування планів виконання загальних запитів;

    графічне ілюстрування плану виконання обраного запиту.

Редактор запитів містить інтегрований текстовий редакторта панель інструментів із набором кнопок для різних дій. Головне вікно редактора запитів розділене по горизонталі на панель запитів (вгорі) та панель результатів (внизу). Інструкції Transact-SQL (тобто запити) для виконання вводяться у верхню панель, а результати обробки системою цих запитів відображаються у нижній панелі. На малюнку нижче показано приклад введення запиту до редактора запитів та результатів виконання цього запиту:

У першій інструкції запиту USE вказується використовувати базу даних SampleDb як поточну базу даних. Друга інструкція – SELECT – витягує всі рядки таблиці Employee. Щоб виконати цей запит і вивести результати, натисніть кнопку Execute (Виконати) або клавішу F5 на панелі інструментів редактора запитів.

Можна відкрити кілька вікон редактора запитів, тобто. виконати кілька підключень до одного або кількох примірників компонента Database Engine. Нове підключення створюється натисканням кнопки New Query на панелі інструментів середовища SQL Server Management Studio.

У рядку стану у нижній частині вікна редактора запитів відображається наступна інформація, пов'язана з виконанням інструкцій запиту:

    стан поточної операції (наприклад, "Запит успішно виконано");

    ім'я сервера бази даних;

    ім'я поточного користувача та ідентифікатор серверного процесу;

    ім'я поточної бази даних;

    час, витрачений виконання останнього запита;

    кількість знайдених рядків.

Однією з основних переваг середовища SQL Server Management Studio є легкість її використання, що також відноситься і до редактора запитів Query Editor. Редактор запитів підтримує безліч можливостей, що полегшують завдання кодування інструкцій Transact-SQL. Зокрема, в ньому використовується підсвічування синтаксису, щоб покращити читання інструкцій Transact-SQL. Усі зарезервовані слова відображаються синім кольором, змінні – чорним, рядки – червоним, а коментарі – зеленим.

Крім цього, редактор запитів оснащений контекстно-залежною довідкою, що називається Dynamic Help, за допомогою якої можна отримати інформацію про конкретну інструкцію. Якщо ви не знаєте синтаксису інструкції, перейдіть до редактора, а потім натисніть клавішу F1 . Також можна виділити параметри різних інструкцій Transact-SQL, щоб отримати довідку з електронної документації.

У SQL Management Studio підтримується інструмент SQL Intellisense, який є видом засобу автозавершення. Іншими словами, цей модуль пропонує найбільш ймовірне завершення частково введених елементів Transact-SQL інструкцій.

З редагуванням запитів може також допомогти браузер об'єктів (object Explorer). Наприклад, якщо ви хочете дізнатися, як створити інструкцію CREATE TABLE для таблиці Employee, клацніть правою кнопкою цю таблицю в браузері об'єктів і в з'явилося контекстному менювиберіть пункт Script Table As --> CREATE to --> New Query Editor Window (Створити скрипт для таблиці --> Використовуючи CREATE --> Нове вікно редактора запитів). Вікно редактора запитів, яке містить створену таким чином інструкцію CREATE TABLE, показано на малюнку нижче. Ця можливість також застосовується і з іншими об'єктами, такими як процедури та функції, що зберігаються.

Оглядач об'єктів дуже корисний для графічного відображення плану виконання конкретного запиту. Планом виконання запиту називається варіант виконання, вибраний оптимізатором запиту серед кількох можливих варіантіввиконання конкретного запиту. Введіть потрібний запит у верхню панель редактора, виберіть послідовність команд з меню Query --> Display Estimated Execution Plan (Запит --> Показати гаданий план виконання) і в нижній панелі вікна редактора буде показаний план виконання цього запиту.

Оглядач рішень

Редагування запитів у SQL Server Management Studio базується на методі рішень (solutions). Якщо створити порожній запит за допомогою кнопки New Query, він буде заснований на порожньому рішенні. Це можна побачити, виконавши послідовність команд з меню View --> Solution Explorer відразу після відкриття порожнього запиту.

Рішення може бути пов'язане з жодним, з одним або з кількома проектами. Порожнє рішення, не пов'язане з жодним проектом. Щоб зв'язати проект із рішенням, закрийте порожнє рішення, браузер рішень і редактор запитів і створіть новий проект, виконавши послідовність команд з меню File --> New --> Project. У вікні New Project, що відкрилося, виберіть у середній панелі опцію SQL Server Scripts. Проект - це спосіб організації файлів у певному місці. Проекту можна присвоїти ім'я та вибрати місце для його розташування на диску. Під час створення нового проекту автоматично запускається нове рішення. Проект можна додати до існуючим рішеннямза допомогою браузера рішень.

Для кожного створеного проекту в браузері рішень відображаються папки Connections (З'єднання), Queries (Запити) та Miscellaneous (Різне). Щоб відкрити нове вікно редактора запитів для даного проекту, клацніть правою кнопкою його папку Queries і в контекстному меню виберіть New Query.

Налагодження SQL Server

SQL Server, починаючи з версії SQL Server 2008, оснащений вбудованим кодом налагодження. Щоб розпочати сеанс налагодження, виберіть у головному меню середовища SQL Server Management Studio наступну послідовність команди Debug --> Start Debugging (Налагодження --> Почати налагодження). Ми розглянемо роботу налагоджувача на прикладі з використанням пакета команд. Пакетом називається послідовність інструкцій SQL і процедурних розширень, що становлять логічне ціле, що відправляється компоненту Database Engine для виконання всіх інструкцій, що містяться в ній.

На малюнку нижче показано пакет, який підраховує кількість співробітників, які працюють над проектом p1. Якщо ця кількість дорівнює 4 або більше, виводиться відповідне повідомлення. В іншому випадку виводяться імена та прізвища співробітників.

Щоб зупинити виконання пакета на певній інструкції, можна встановити точки зупинки, як показано на малюнку. Для цього потрібно клацнути зліва від рядка, на якому потрібно зупинитися. На початку налагодження виконання зупиняється на першій лінії коду, що відзначається жовтою стрілкою. Щоб продовжити виконання та налагодження, виконайте команду меню Debug --> Continue (Налагодження --> Продовжити). Виконання інструкцій пакета продовжиться до першої точки зупинки, і жовта стрілка зупиниться на цій точці.

Інформація, пов'язана з процесом налагодження, відображається у двох панелях у нижній частині вікна редактора запитів. Інформація про різних типахінформація про налагодження згрупована в цих панелях на декількох вкладках. Ліва панель містить вкладку Autos (Автоматичні), Locals (Локальні) та до п'яти вкладок Watch (Видимі). Права панель містить вкладки Call Stack (Стек викликів), Threads (Потоки), Breakpoints (Точки зупинки), Command Window (Вікно команд), Immediate Window (Вікно інтерпретації) та Output (Висновок). На вкладці Locals відображаються значення змінних, на вкладці Call Stack - значення стека викликів, а вкладки Breakpoints - інформація про точках зупинки.

Щоб завершити процес налагодження, виконайте послідовність команд із головного меню Debug --> Stop Debugging або натисніть синю кнопку на панелі інструментів відладчика.

У SQL Server 2012 функціональність вбудованого в SQL Server Management Studio відладчика розширена кількома новими можливостями. Тепер у ньому можна виконувати низку наступних операцій:

    Вказувати умову точки зупинки. Умова точки зупинки- це SQL-вираз, обчислене значення якого визначає, буде виконання коду зупинено у цій точці чи ні. Щоб вказати умову точки зупинки, клацніть червоний значок потрібної точки правою кнопкою та в контекстному меню виберіть Condition (Умова). Відкриється діалогове вікно Breakpoint Condition (Умова точки зупинки), в якому потрібно ввести необхідний логічний вираз. Крім цього, якщо необхідно зупинити виконання, якщо вираз правильно, то слід встановити перемикач Is True. Якщо ж виконання потрібно зупинити, якщо вираз змінилося, потрібно встановити перемикач When Changed (Змінилося).

    Вказати кількість попадань у точку зупинки. Число попадань - це умова зупинки виконання в даній точці в залежності від кількості разів, коли була досягнута ця точка зупинки в процесі виконання. При досягненні вказаної кількості проходжень та будь-якої іншої умови, вказаної для цієї точки зупинки, відладчик виконує вказану дію. Умова переривання виконання на основі числа влучень може бути однією з наступних:

    1. безумовна (дія за замовчуванням) (Break always);

      якщо кількість влучень дорівнює вказаному значенню (Break when the his count equals a specified value);

      якщо кількість влучень кратно зазначеному значенню (Break when the hit count equals a multiple of a specified value);

      якщо число попадань дорівнює або більше зазначеного значення (Break when the his count is greater or equal to a specified value).

    Щоб задати кількість влучень у процесі налагодження, клацніть правою кнопкою значок потрібної точки зупинки на вкладці Breakpoints, у контекстному меню виберіть пункт Hit Count (Кількість влучень), потім у діалоговому вікні Breakpoint Hit Count (Кількість влучень в точку зупинки) виберіть одну з умов. із наведеного раніше списку. Для опцій, які потребують значення, введіть його в текстове поле праворуч від розкривного списку умов. Щоб зберегти ці умови, натисніть кнопку OK.

    Вказувати фільтр точки зупинки. Фільтр точки зупинки обмежує роботу зупинки лише на вказаних комп'ютерах, процесах або потоках. Щоб встановити фільтр точки зупинки, клацніть потрібну точку правою кнопкою та в контекстному меню виберіть пункт Filter. Потім у діалоговому вікні Breakpoint Filters (Фільтр точки зупинки) вкажіть ресурси, якими потрібно обмежити виконання цієї точки зупинки. Щоб зберегти ці умови, натисніть кнопку ОК.

    Вказувати дію в точці зупинки. Умова When Hit (При попаданні) вказує дію, яку потрібно виконати, коли виконання пакета потрапляє до цієї точки зупинки. За умовчанням, коли задовольняються як умова кількості влучень, і умова зупинки, тоді виконання переривається. Альтернативно можна вивести наперед зазначене повідомлення.

    Щоб вказати дію при попаданні в точку зупинки, клацніть правою кнопкою червоний значок потрібної точки та виберіть When Hit у контекстному меню. У діалоговому вікні When Breakpoint is Hit (При попаданні в точку зупинки) виберіть потрібну дію. Щоб зберегти ці умови, натисніть кнопку OK.

    Використовуйте вікно швидкої перевірки Quick Watch. У вікні QuickWatch (Швидка перевірка) можна переглянути значення виразу Transact-SQL, а потім зберегти цей вираз у вікні перегляду значень Watch (Перегляд значень). Щоб відкрити вікно Quick Watch, у меню Debug виберіть Quick Watch. Вираз у цьому вікні можна або вибрати зі списку Expression (Вираз), або ввести його в це поле.

    Використовувати спливаючу підказку Quick Info. При наведенні вказівника миші на ідентифікатор коду засіб Quick Info ( Короткі відомості) відображає його оголошення у спливаючому вікні.




Top