Пользовательские параметры синтаксиса transact sql прописываются

Содержание
  1. Синтаксис языка Transact-SQL, поддерживаемый технологией IntelliSense
  2. Инструкции, поддерживаемые технологией IntelliSense
  3. Инструкция SELECT
  4. Дополнительные поддерживаемые инструкции Transact-SQL
  5. Технология IntelliSense в поддерживаемых инструкциях
  6. Примеры
  7. Синтаксические обозначения в Transact-SQL (Transact-SQL)
  8. Многочастные имена
  9. Соглашения примеров кода
  10. Ссылки «Относится к»
  11. Параметры редактора Transact-SQL
  12. Выполнение запроса
  13. Результаты запроса
  14. Справочник Transact-SQL – основы для новичков
  15. Transact-SQL справочник для начинающих — описание справочника
  16. База данных
  17. Создание
  18. Удаление
  19. Изменение
  20. Типы данных
  21. Точные числа
  22. Приблизительные числа
  23. Дата и время
  24. Символьные строки
  25. Двоичные данные
  26. Другие
  27. Таблицы
  28. Создание
  29. Добавление колонки
  30. Изменение типа данных
  31. Удаление колонки
  32. Удаление таблицы
  33. Представления
  34. Создание
  35. Изменение
  36. Удаление
  37. Системные представления
  38. Функции
  39. Создание
  40. Изменение
  41. Удаление
  42. Встроенные функции
  43. Системные функции
  44. Агрегатные функции
  45. Строковые функции
  46. Математические функции
  47. Функции даты и времени
  48. Функции преобразование
  49. Табличные функции
  50. Создание
  51. Изменение
  52. Удаление
  53. Процедуры
  54. Создание
  55. Изменение
  56. Удаление
  57. Системные процедуры
  58. Триггеры
  59. Создание
  60. Изменение
  61. Удаление
  62. Включение/Отключение
  63. Индексы
  64. Создание
  65. Отключение
  66. Удаление
  67. Курсоры
  68. Запросы DML
  69. SELECT
  70. UPDATE
  71. INSERT
  72. DELETE

Синтаксис языка Transact-SQL, поддерживаемый технологией IntelliSense

Инструкции, поддерживаемые технологией IntelliSense

Технология IntelliSense недоступна для зашифрованных объектов баз данных, например зашифрованных хранимых процедур или определяемых пользователем функций. Справка и краткие сведения по параметрам недоступны для параметров расширенных хранимых процедур и определяемых пользователем типов при интеграции со средой CLR.

Инструкция SELECT

Редактор запросов компонента Компонент Database Engine обеспечивает поддержку технологии IntelliSense для следующих синтаксических элементов в инструкции SELECT:

Дополнительные поддерживаемые инструкции Transact-SQL

В предложении AS технология IntelliSense поддерживается только для тех инструкций и синтаксических конструкций, которые перечислены в этом разделе. ALTER PROCEDURE Все синтаксические конструкции Для предложения EXTERNAL NAME технология IntelliSense не поддерживается.

В предложении AS технология IntelliSense поддерживается только для тех инструкций и синтаксических конструкций, которые перечислены в этом разделе. USE Все синтаксические конструкции. None

Технология IntelliSense в поддерживаемых инструкциях

В редакторе запросов компонента Компонент Database Engine технология IntelliSense поддерживается для следующих синтаксических элементов при их использовании в одной из поддерживаемых инструкций Transact-SQL :

Все типы соединений, включая APPLY

Ссылки на следующие объекты базы данных.

Базы данных и схемы

Таблицы, представления, функции с табличным значением и табличные выражения

Процедуры и параметры процедур

Скалярные функции и скалярные выражения

Обобщенные табличные выражения

Объекты базы данных, ссылки на которые имеются только в инструкциях CREATE или ALTER в скрипте или пакете, но которые не существуют в базе данных, поскольку скрипт или пакет еще не выполнялся. Ниже приведены эти объекты.

Таблицы и процедуры, указанные в инструкции CREATE TABLE или CREATE PROCEDURE в скрипте или пакете.

Изменения в таблицах и процедурах, указанных в инструкции ALTER TABLE или ALTER PROCEDURE в скрипте или пакете.

Технология IntelliSense недоступна для столбцов инструкции CREATE VIEW, пока инструкция CREATE VIEW не будет исполнена.

Поддержка технологии IntelliSense для приведенных ранее элементов при их использовании в других инструкциях Transact-SQL не предоставляется. Например, поддержка технологии IntelliSense предоставляется для имен столбцов, которые используются в инструкции SELECT, но не для столбцов, используемых в инструкции CREATE FUNCTION.

Примеры

Эта функциональность также применяется к наборам инструкций Transact-SQL в предложении AS инструкций CREATE PROCEDURE или ALTER PROCEDURE.

Внутри скрипта или пакета Transact-SQL поддержка технологии IntelliSense обеспечивается для объектов, указанных в инструкции CREATE или ALTER. Однако эти объекты не существуют в базе данных, так как инструкции еще не выполнялись. Например, в редакторе запросов можно ввести следующий код:

Источник

Синтаксические обозначения в Transact-SQL (Transact-SQL)

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

Многочастные имена

Если не указано иное, все ссылки Transact-SQL на имена объектов базы данных могут быть четырехсоставными именами, записываемыми в следующей форме.

server_name
Указывает имя связанного или удаленного сервера.

database_name
Указывает имя базы данных SQL Server, если объект хранится на локальном экземпляре SQL Server. Когда объект находится на связанном сервере, аргумент database_name указывает каталог OLE DB.

schema_name
Если объект находится в базе данных SQL Server, указывает имя схемы, которая содержит объект. Когда объект находится на связанном сервере, аргумент schema_name указывает имя схемы OLE DB.

object_name
Ссылается на имя объекта.

При ссылке на конкретный объект нет необходимости всякий раз указывать сервер, базу данных и схему — компонент Компонент SQL Server Database Engine попытается определить этот объект. Однако, если объект не удается найти, возвращается ошибка.

Чтобы избежать ошибок разрешения имен, при указании объекта области схемы рекомендуется указать имя схемы.

Чтобы пропустить промежуточные узлы, для обозначения их позиций используйте точки. В следующей таблице показаны допустимые форматы имен объектов.

Формат ссылки на объект Описание
server.database.schema.object Четырехчастное имя.
server.database..object Имя схемы пропущено.
server..schema.object Имя базы данных пропущено.
server. object Имя базы данных и имя схемы пропущены.
database.schema.object Имя сервера пропущено.
database..object Имя сервера и имя схемы пропущены.
schema.object Имя сервера и имя базы данных пропущены.
object Имена сервера, базы данных и схемы пропущены.

Соглашения примеров кода

Если не указано иное, примеры, приведенные в справочнике по Transact-SQL, были проверены с использованием среды SQL Server Management Studio и настроек по умолчанию для следующих параметров:

Большинство примеров кода в руководстве по Transact-SQL было проверено на серверах, работающих с порядком сортировки с учетом регистра. Тестовые серверы, как правило, использовали кодовую страницу ANSI/ISO 1252.

Многие примеры кода добавляют к строковым константам в Юникоде префикс в виде буквы N. Без префикса N строка преобразуется в кодовую страницу базы данных по умолчанию. Кодовая страница по умолчанию может не распознавать определенные символы.

Ссылки «Относится к»

Ссылка Transact-SQL включает разделы, относящиеся к SQL Server (SQL Server 2008 и выше), База данных SQL Azure и Azure Synapse Analytics.

В верхней части каждой статьи есть раздел, где указано, к каким продуктам относится тема статьи. Если продукт не указан, то компонент, описанный в статье, для данного продукта недоступен. Например, группы доступности были введены в SQL Server 2012 (11.x). В статье о CREATE AVAILABILITY GROUP указано, что эта функция применима к SQL Server (SQL Server 2012 (11.x) и выше), так как она неприменима к SQL Server 2008, SQL Server 2008 R2 или База данных SQL Azure.

К продукту относится общая тема статьи, но в некоторых случаях не все аргументы поддерживаются. Например, пользователи автономной базы данных впервые появились в SQL Server 2012 (11.x). Инструкцию CREATE USER можно применять в любом продукте SQL Server, однако синтаксис WITH PASSWORD не может использоваться с более ранними версиями. Дополнительные разделы Область применения вставляются в описания соответствующих аргументов в статье.

Источник

Параметры редактора Transact-SQL

Этот раздел содержит сведения о некоторых параметрах редактора Transact-SQL. Чтобы настроить эти параметры, откройте меню Средства/Параметры и перейдите в диалоговое окно Параметр.

Выполнение запроса

Свойство Описание
SET ROWCOUNT Значение по умолчанию, равное 0, указывает на то, что SQL Server будет продолжать ожидание результатов, пока все из них не будут получены. При установке значения больше 0 SQL Server прервет запрос после получения указанного числа строк. Для выключения этого параметра (чтобы возвращались все строки) задайте SET ROWCOUNT 0.
SET TEXTSIZE Значение по умолчанию, равное 2 147 483 647 байт, указывает на то, что SQL Server предоставит содержимое поля полностью вплоть до пределов для полей данных text, ntext, nvarchar(max) и varchar(max). Этот параметр не влияет на тип данных xml. Задав меньшее число, можно ограничить вывод результатов в случае больших значений. Содержимое столбцов большего размера, чем заданное число, будет усекаться.
Время ожидания выполнения Указывает число секунд ожидания перед отменой запроса. Значение, равное 0, указывает на неограниченное время ожидания или отсутствие времени ожидания.
По умолчанию открывать новые запросы в режиме SQLCMD При установке этого флажка новые запросы будут открываться в режиме SQLCMD. Этот флажок становится видимым только в случае, если диалоговое окно открыто из меню Средства.

При выборе этого параметра следует учитывать следующие ограничения.

Результаты запроса

Свойство Описание
Включение запроса в результирующий набор Возвращает текст запроса как часть результирующего набора.
Включение заголовков столбцов при копировании или сохранении результатов Включает верхние колонтитулы столбцов (заголовки) при копировании результатов в буфер обмена или при сохранении файла. Снимите этот флажок, если нужно, чтобы при сохранении или копировании данных результатов они содержали только данные, без заголовков столбцов.
Сброс результатов после выполнения Освобождает память посредством сбрасывания результатов запроса после того, как они были выведены на экран.
Отображение результатов на отдельной вкладке Отобразить результирующий набор в новом окне документа, а не в нижней части окна документа запроса.
Переключение на вкладку результатов после выполнения запроса Автоматически переводит изображение на экране к результирующему набору.
Максимальное число полученных символов Данные не в формате XML:

Введите число от 1 до 65 535, чтобы указать максимальное число символов, отображаемых в каждой ячейке. Примечание. Указание слишком большого числа символов может привести к тому, что результирующий набор будет отображаться усеченным. Максимальное число символов, отображаемых в каждой ячейке, зависит от размера шрифта. Высокое значение в этом окне может привести к нехватке памяти для среды SQL Server Management Studio и снижению производительности системы при возвращении больших результирующих наборов.

Источник

Справочник Transact-SQL – основы для новичков

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

T SQL Base 1

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

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

Transact-SQL справочник для начинающих — описание справочника

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

Так как охватить абсолютно все просто невозможно, поэтому не удивляйтесь, если Вы что-то здесь не обнаружили. Еще раз повторю, что данный справочник создан для начинающих программистов на Transact-SQL, а также для простых админов, которым периодически требуется выгружать какие-то данные с SQL сервера.

Для детального изучения языка SQL рекомендую почитать мою книгу «SQL код – самоучитель по SQL для начинающих программистов», в которой я максимально подробно, с большим количеством примеров рассказываю о языке SQL. Для изучения языка T-SQL на профессиональном уровне рекомендую посмотреть мои видеокурсы по T-SQL.

База данных

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

Создание

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

где, test это название базы данных.

Подробней о создании базы данных на SQL сервере, мы разговаривали в материале Как создать базу данных в MS SQL Server

Удаление

Если Вам необходимо удалить базу данных, то можете использовать запрос:

Изменение

Для изменений параметров базы данных можно использовать графический интерфейс Management Studio, в котором все параметры подробно описаны, а можно посылать запросы ALTER DATABASE, например, для включения автоматического сжатия базы данных test, используем следующий запрос

Надеюсь понятно, ALTER DATABASE команда на изменение, test название изменяемой базы данных, SET команда, указывающая на то, что мы будем изменять параметры базы данных, AUTO_SHRINK непосредственно сам параметр, ON/OFF значение параметра.

Типы данных

Самые распространенные и часто используемые

Точные числа

Приблизительные числа

Дата и время

Символьные строки

Двоичные данные

Другие

Таблицы

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

Создание

Добавление колонки

Изменение типа данных

Давайте изменим, тип данных нового поля, которое мы только что создали (prosto_pole) с numeric(18, 0) на bigint и увеличим длину поля comment до 300 символов.

Примечание! SQL сервер не сможет выполнить изменение типа данных, если преобразование значений в этих полях невозможно, в этом случае придется удалять колонку, со всем данными, и добавлять заново или очищать все данные в этом поле.

Удаление колонки

Для удаления определенной колонки используем команду drop, например, для удаления поля prosto_pole используем следующий запрос

Удаление таблицы

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

Представления

Очень полезным объектом в базе данных является представление (VIEW) или по-нашему просто вьюха. Если кто не знает, то представление, это своего рода хранимый запрос, к которому можно обращаться также как и к таблице. Давайте создадим представление на основе тестовой таблицы test_table, и допустим, что очень часто нам требуется писать запрос, например, по условию сумма больше 1000, поэтому для того чтобы каждый раз не писать этот запрос мы один раз напишем представление, и впоследствии будем обращаться уже к нему.

Создание

Пример обращения к представлению:

Изменение

Удаление

Системные представления

В СУБД MS SQL Server есть таки системные объекты, которые могут предоставить иногда достаточно полезную информацию, например системные представления. Сейчас мы разберем парочку таких представлений. Обращаться к ним можно также как и к обычным представлениям (например, select * from название представление)

Их на самом деле очень много, поэтому все разобрать, не получиться. Если Вы хотите посмотреть, как их можно использовать на практике, то это мы уже делали, например, в материалах Как узнать активные сеансы пользователей в MS Sql 2008

Функции

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

Создание

Пример использования ее в запросе:

Изменение

Удаление

Встроенные функции

Помимо того, что SQL сервер позволяет создавать пользовательские функции, он также предоставляет возможность использовать встроенные функции, которые за Вас уже написали разработчики СУБД. Их очень много, поэтому самые распространенные я разбил на группы и попытался их кратко описать.

Системные функции

Здесь я приведу несколько примеров функций, которые возвращают различные системные данные

Агрегатные функции

Функции, которые вычисляют какое-то значение на основе набора (группы) значений. Если при вызове этих функций нужно указать колонку для вывода результата, то необходимо выполнить группировку данных (group by) по данному полю. Подробно данную конструкцию мы рассматривали в статье Transact-SQL группировка данных group by

Строковые функции

Данный вид функций соответственно работает со строками.

Left (строковое выражение, количество символов) – возвращает указанное число символов строки начиная слева.

Right (строковое выражение, количество символов) – возвращает указанное число символов строки начиная справа

Len (строка) – возвращает длину строки.

Lower (строка) – возвращает строку, в которой все символы приведены к нижнему регистру.

Upper (строка) — возвращает строку, в которой все символы приведены к верхнему регистру.

Ltrim (строка) – возвращает строку, в которой все начальные пробелы удалены.

Rtrim (строка) – возвращает строку, в которой все пробелы справа удалены

Replace (строка, что ищем, на что заменяем) – заменяет в строковом выражении все вхождения указанные во втором параметре, символами указанным в третьем параметре.

Replicate (строка, количество повторений) – повторяет строку (первый параметр) столько раз, сколько указанно во втором параметре.

Reverse (строка) – возвращает все в обратном порядке.

Space (число пробелов) – возвращает строку в виде указанного количества пробелов.

Substring (строка, начальная позиция, сколько символов) – возвращает строку, длиной в число указанное в третьем параметре, начиная с символа указанного во втором параметре.

Про строковые функции мы также разговаривали в материале Сочетание строковых функций на Transact-SQL

Математические функции

Round (число, точность округления) – округляет числовое выражение до числа знаков указанного во втором параметре

Floor (число) – возвращает целое число, округленное в меньшую сторону.

Ceiling (число) – возвращает целое число, округленное в большую сторону.

Power (число, степень) — возвращает число возведенное в степень указанную во втором параметре.

Square (число) – возвращает числовое значение, возведенное в квадрат

Abs (число) – возвращает абсолютное положительное значение

Log(число) – натуральный логарифм с плавающей запятой.

Pi – число пи.

Rand – возвращает случайное число с плавающей запятой от 0 до 1

Функции даты и времени

Getdate() – возвращает текущую дату и время

Day(дата) – возвращает день из даты.

Month(дата) – возвращает номер месяца из даты.

Year (дата) –возвращает год из даты

DATEPART(раздел даты, дата) – возвращает из даты указанный раздел (DD,MM,YYYY и др.)

Isdate (дата) – проверяет введенное выражение, является ли оно датой

Функции преобразование

Cast (выражение as тип данных) – функция для преобразования одного типа в другой. В примере мы преобразуем тип float в int

Convert – (тип данных, выражение, формат даты) – функция для преобразования одного типа данных в другой. Очень часто ее используют для преобразования даты, используя при этом третий необязательный параметр — формат даты.

Табличные функции

Создаются, для того чтобы получать из них данные как из таблиц, но после различного рода вычислений. Подробно о табличных функциях мы разговаривали в материале Transact-sql – Табличные функции и временные таблицы

Создание

Изменение

Удаление

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

Пример обращения к этой функции

Процедуры

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

Создание

Изменение

Удаление

Можно вызывать по разному, например:

Где, EXECUTE и EXEC вызов процедуры, sp_test_procedure соответственно название нашей процедуры, 1 значение параметра

Системные процедуры

Системные процедуры – это процедуры для выполнения различных административных действий как над объектами на сервере, так и над конфигурацией самого сервера. Вызываются они также как и обычные процедуры, но в контексте любой базы данных.

Их огромное множество, поэтому приведу всего несколько примеров.

sp_configure – процедура для отображения и внесения изменений в конфигурацию ядра СУБД. Первый параметр название параметра конфигурации, второй параметр значение.

где, ‘Ad Hoc Distributed Queries’ — это название параметра, 1 соответственно значение, на которое мы хотим изменить, reconfigure применят введенное значение.

На практике мы применяли эту процедуру в материале Межбазовый запрос на Transact-SQL

sp_executesql – выполняет инструкцию или набор инструкций Transact-SQL, которые могут формироваться динамически. Данную процедуры мы использовали в материале журналирование изменений данных в таблице на Transact-SQL

Где, первый параметр — sql инструкция (строка в Юникоде), второй — определение всех параметров встроенных в sql инструкцию, третий — значение параметров.

sp_help – возвращает подробные сведения о любом объекте базы данных.

sp_rename – переименовывает объект в базе данных. Можно использовать для переименования таблиц, индексов, название колонок в таблицах, Не рекомендуется использовать эту процедуру для переименования пользовательских процедур, триггеров, функций.

Пример переименования таблицы

где, первым параметром идет объект со старым названием, а второй параметр — это новое название объекта.

Пример переименования столбца в таблице

Третьим параметром указывается, что переименовывается колонка.

Триггеры

Триггер – это обычная процедура, но вызывается она событием, а не пользователем. Событие, например, может быть вставка новой строки в таблицу (insert), обновление данных в таблице (update) или удаление данных из таблицы (delete).

Создание

Изменение

Удаление

Включение/Отключение

О триггерах мы разговаривали в статье — Как создать триггер на Transact-SQL.

Индексы

Это объект базы данных, который повышает производительность поиска данных, за счет сортировки данных по определенному полю. Если провести аналогию то, например, искать определенную информацию в книге намного легче и быстрей по его оглавлению, чем, если бы этого оглавления не было. В СУБД MS SQL Server существует следующие типы индексов:

Кластеризованный индекс — при таком индексе строки в таблице сортируются с заданным ключом, т.е. указанным полем. Данный тип индексов у таблицы в MS SQL сервере может быть только один и, начиная с MS SQL 2000, он автоматически создается при указании в таблице первичного ключа (PRIMARY KEY).

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

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

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

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

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

Columnstore index доступен начиная с 2012 версии SQL сервера в редакциях Enterprise, Developer и Evaluation.

Создание

Где, CREATE CLUSTERED INDEX — это инструкция к созданию кластеризованного индекса, idx_clus_one название индекса, test_table(id) соответственно таблица и ключевое поле для сортировки.

Отключение

Удаление

Курсоры

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

Пример (все это в коде процедуры)

Подробно о курсорах мы разговаривали в материале Использование курсоров и циклов в Transact-SQL.

Запросы DML

DML (Data Manipulation Language) – это операторы SQL, с помощью которых осуществляется манипуляция данными. К ним относятся select, update, insert, delete.

SELECT

Оператор SQL с помощью которого осуществляется выборка данных. Подробно о нем мы разговаривали в материале Язык запросов SQL – Оператор SELECT

UPDATE

Используется для обновления данных

INSERT

Оператор на добавление данных

DELETE

С помощью этого оператора можно удалить данные.

Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.

Вот и все, справочник закончился! Надеюсь, он Вам хоть как-то помог. Удачи!

Источник

Моя дача
Adblock
detector