]]> ]]>

Microsoft SQL Server

Реализация языка программирования SQL

Microsoft SQL Server — система управления реляционными базами данных, разработанная корпорацией Microsoft и работающая только под Windows.

SQL Server использует процедурное расширение T-SQL (Transact-SQL). Сам язык SQL этой СУБД отличается от других реализаций SQL и иногда рассматривается как диалект T-SQL.

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

Для администрирования БД и разработки приложений для СУБД SQL Server может использоваться ряд инструментов, предоставляемых корпорацией Microsoft:

  • SQLCMD — инструмент с интерфейсом типа командной строки, предназначенный для выполнения команд SQL интерактивно или из скрипта; используется в качестве инсталляционного интерфейса по умолчанию.
  • Microsoft Visual Studio включает поддержку разработки для SQL Server.
  • SQL Server Management Studio — IDE для конфигурирования и управления БД SQL Server.

Примеры:

Факториал:

Пример для версий Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Используется рекурсивное определение факториала, реализованное через рекурсивный запрос. Каждая строка запроса содержит два числовых поля — n и n!, и каждая следующая строка вычисляется с использованием данных из предыдущей.

Можно вычислить целочисленные факториалы только до 20!. При попытке вычислить 21! возникает ошибка “Arithmetic overflow error”, т.е. происходит переполнение разрядной сетки.

Для вещественных чисел вычисляется факториал 100! (Для этого в примере необходимо заменить bigint на float в 3-ей строке)

with factorial(n, f) as
(
 select 0, convert(bigint,1) 
  union all
 select n+1, f*(n+1) from factorial where n<20
)
select cast(n as varchar)+'! = '+cast(f as varchar)
  from factorial

Числа Фибоначчи:

Пример для версий Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

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

with fibonacci(a, b) as
(
 select 1, 1
  union all
 select b, a+b from fibonacci where b < 1000
)
SELECT cast(a as varchar)+', ' AS [text()]
  FROM fibonacci
   FOR XML PATH ('')

Hello, World!:

Пример для версий Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3
select 'Hello, World!';

Факториал:

Пример для версий Microsoft SQL Server 2005
declare @max_n tinyint = 20
;with t as (
   select 1 as n, convert(bigint,1) as f
   union all
   select n+1, f*(n+1) from t
   where n < @max_n
   
)
select convert(varchar,n)+'! = '+convert(varchar(32),f)+', ' 
from t as [text] 
FOR XML PATH ('')

Числа Фибоначчи:

Пример для версий Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Используется возможность рекурсивных запросов. Кол-во членов ряда — 92

declare @max_n tinyint = 92
;with t as (
	select n = 1, fib = convert(bigint,1), xfib = convert(bigint,0)
	 union all		  
	select n = n+1, fib = fib+xfib, xfib = fib from t 
        where n < @max_n
)
select fib from t

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам