Showing posts with label MS SQL. Show all posts
Showing posts with label MS SQL. Show all posts

Saturday, April 12, 2014

SQL Server tips: sp_help... - commands

sp_helpindex 'Customer'
It allows to identify whether the 'Customer' table has any indexes
(Tip from Basic Execution Plans - http://www.youtube.com/watch?v=lvnCRhgfyV0)

sp_helpstats 'Orders'
It shows whether the 'Orders' has a statistics




Wednesday, April 17, 2013

Алгоритм для использования объединения таблиц CROSS JOIN

Далее для демонстрации CROSS JOIN рассмотрим задачи на основе базы Northwind, загрузить ее образец можно с http://msdn.microsoft.com/ru-ru/library/ms143221(v=sql.105).aspx

Диаграмма БД:

Задача 1.
Сколько городов обслужил каждый продавец?

1) Осмыслить структуры базы и объединить все таблицы, упомянутые в задаче

SELECT *
FROM Employees E CROSS JOIN Orders O

Получим малополезный массив кол-во строк первой таблицы * кол-во строк второй таблицы

2) Профильтровать так, чтобы остались только осмысленные записи, т.е. те, которые имеют смысл в реальности.

SELECT *
FROM Employees E CROSS JOIN Orders O
WHERE E.EmployeeID=O.EmployeeID

3) Спрашиваем себя, что мы получили в результате. В данном примере это список всех заказов ORDERS.
Это нам нужно для того, чтобы позже

4) Всегда GROUP BY
А чего я хочу получить по задаче? Я хочу список продавцов, значит в GROUP BY пишем продавцов

SELECT E.FirstName+' '+E.LastName, count(DISTINCT ShipCity)
FROM Employees E CROSS JOIN Orders O
WHERE E.EmployeeID=O.EmployeeID
GROUP BY E.FirstName+' '+E.LastName
ORDER BY count(DISTINCT ShipCity) DESC


Задача 2.
Как зовут покуптелей, делавших в 1996-м заказы у нескольких продавцов?

SELECT C.ContactName, COUNT (DISTINCT EMPLOYEEID)
FROM CUSTOMERS C CROSS JOIN Orders O
WHERE C.CustomerID=O.CustomerID
AND YEAR (ORDERDATE)=1996
GROUP BY C.ContactName
HAVING COUNT (DISTINCT EMPLOYEEID) > 1

COUNT (DISTINCT EMPLOYEEID) из SELECT можно убрать


 Задачи с тремя и более таблицами и JOIN-ами можно решать по такому же алгоритму:









Saturday, June 07, 2008

Бэкапирование баз MS SQL

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

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

Step-by-Step в SQL Server Management Studio на примере базы My_DB

1) Создание нового задания.
Сервер-> SQL Server Agent -> Jobs - New Job
Заполняем Name, Description, обращаем внимание на галочку в Enable (пока отключим ее, сняв галку, позже после создания задания и расписания включим)
Продолжение см. в комментах.

Friday, May 23, 2008

По переносу базы MS SQL 2005 на другой диск

Обратились ароматизаторы с проблемкой, в рамках которой нужно было перенести одну из баз MS SQL Server 2005 на другой диск. Нашел ссылку http://technet.microsoft.com/ru-ru/library/ms187858.aspx , но открыв MS SQL Management Studio и прикинув как это сделать через GUI, попробовал и .... прикольно, не думал, что так просто переместить базу в сиквеле :)

Wednesday, November 07, 2007

Принципалы (principals), защищаемые (securables), разрешения (permissions) в SQL Server 2005

Принципалы (principals) — это те объекты, которым в SQL Server 2005 можно предоставлять разрешения. Они могут быть как индивидуальными (например, учетная запись), так и групповыми (например, роль).

Securables (дословно "защищаемые") — еще одна важнейшая концепция системы безопасности SQL Server 2005. Это все, на что в SQL Server 2005 можно назначить разрешения.

Терминология системы безопасности SQL Server 2005, принципалы (principals), защищаемые (securables), разрешения (permissions)

Tuesday, October 23, 2007

первый бэкап и ресторе в MS SQL 2005 :)

Недавно меня неофициально отправили на MS-курс "Внедрение MS SQL 2005" (на работе читали курсы для разработчиков двумя этажами выше). И похоже, что мои впечатления от "первого" знакомства MS SQL 2005 выше ожидаемых. Хотя конечно, чтобы серьезно заниматься им, надо потратить немало времени и усилий. Но мне нужно знать и представлять "куда кликнуть" когда наш DBA от MS SQL будет в отпуске или отъезде.
Мне понравились доступность и понятность материалов из текнет и онлайн-букса.
Пример скрипта, который я нашел и который возможно нужен будет частенько для создания копии БД для разработчиков.

-- Скрипт создает копию БД (formonitor) из ее бэкапа под новым именем (DB_test) и новым расположением md- и ld-файлов БД.

USE master

GO
-- DROP DATABASE DB_test
RESTORE DATABASE DB_test
FROM disk='D:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\formonitor.bak'
WITH RECOVERY ,
MOVE 'Formonitor' TO 'D:\Test_DB\DB_test.mdf',
MOVE 'Formonitor_log' TO 'D:\Test_DB\DB_test.ldf'
--
/*
Чтобы узнать логические имена файлов 'Formonitor' и 'Formonitor_log' из файла бэкапа formonitor.bak нужно сказать:
RESTORE FILELISTONLY
FROM disk='D:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\formonitor.bak'
*/