Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Типы данных, переменные, константы и выражения






Как и в любом другом языке программирования, в T-SQL имеются переменные и константы, которые хранят информацию, относящуюся к тому или иному типу данных (data type) < $I[]тип данных (data type)>. Тип данных в T-SQL может быть одним из следующих:

Название типа Описание
bigint< $I[]bigint> Целое число от -2^63 (-9223372036854775808) до 2^63-1 (9223372036854775807). Размер (в байтах) — 8.
binary< $I[]binary> Двоичные (бинарные) значения фиксированной длины. Максимальная длина — 8000 байт.
bit< $I[]bit> 1, 0 или NULL.
char< $I[]char> Символьные данные фиксированной длины, не в Unicode-кодировке. Максимальная длина — 8000 символов.
cursor< $I[]cursor> Тип данных для переменных и OUTPUT-параметров хранимых процедур, которые ссылаются на курсор (cursor). Единственный базовый тип данных, который не может присваиваться столбцу таблицы.
image< $I[]image> Двоичные данные переменной длины. Максимальная длина — 2^31 – 1 (2, 147, 483, 647) байт.
int< $I[]int> Целые числа от -2^31 (-2, 147, 483, 648) до 2^31 - 1 (2, 147, 483, 647). В стандарте SQL-92 синонимом для intявляется integer. Размер (в байтах) — 4.
datetime< $I[]datetime> Тип даты и времени в диапазоне от 1 января 1753 года до 31 декабря 9999 года, с точностью три сотых секунды, или 3.33 миллисекунд.
decimal< $I[]decimal> Тип данных для сохранения с высокой точностью числовых значений в диапазоне от –10^38 +1 до 10^38 –1. Синтаксис: decimal[(p[, s])] p—(от precision — точность) максимальное общее число десятичных разрядов, которые могут быть сохранены как слева так и справа от десятичной точки. Точность должна быть значением от 1 до 38. s — (от scale — масштаб) максимальное число десятичных разрядов, которые могут быть сохранены справа от десятичной точки. Масштаб должен быть значением от 0 до p. Значением масштаба по умолчанию является 0; следовательно, 0 < = s < = p. Максимальная длина варьирует в зависимости от точности.
float< $I[]float> Тип данных для приближенного сохранения десятичных значений от -1.79E + 308 до 1.79E + 308. Синтаксис: float [ (n) ] Числовой тип данных с плавающей точкой от -1.79E + 308 до 1.79E + 308. n — число битов, используемых для сохранения мантиссы числа с плавающей точкой в экспоненциальном представлении; определяет точность и размер. n должно быть значением от 1 до 53.
money< $I[]money> Тип данных для сохранения денежных значений от -2^63 (-922, 337, 203, 685, 477.5808) до 2^63 - 1 (+922, 337, 203, 685, 477.5807) с точностью до одной тысячной денежной единицы.
nchar< $I[]nchar> Unicode-данные фиксированной длины с максимальной длиной 4000 символов.
numeric< $I[]numeric> Тип данных, функционально эквивалентный типу decimal. Синтаксис: numeric [(p [, s ])] p — точность; определяет максимальное общее число десятичных разрядов, которые могут быть сохранены как слева, так и справа от десятичной точки. Точность должна быть значением в диапазоне от 1 до 38. s определяет максимальное число десятичных разрядов, которые могут сохраняться справа от десятичной точки. Масштаб должен быть значением от 0 до p. Масштаб по умолчанию — 0; следовательно, 0 < = s < = p. Максимальный размер варьирует в зависимости от точности.
nvarchar< $I[]nvarchar> Unicode-данные переменной длины с максимальной длиной 4000 символов. sysname— предоставляемый системой определяемый пользователем тип данных, функционально эквивалентный типу nvarchar(128)и используемыйдля ссылки на имена объектов базы данных.
real< $I[]real> Числовой тип для приближенных данных в диапазоне от –3.40E+38 до 3.40E+38. Размер — 4 байта. В SQL Server синонимом для real является float(24).
smalldatetime< $I[]smalldatetime> Данные даты и времени от 1 января 1900 до 6 июня 2079 с точностью до одной минуты.
smallint< $I[]smallint> Целые данные в диапазоне от 2^15 (-32, 768) до 2^15 - 1 (32, 767). Размер (в байтах) — 2 (может включать не более 5 десятичных цифр).
smallmoney< $I[]smallmoney> Значения денежных данных от -214, 748.3648 до +214, 748.3647 с точностью до одной десятитысячной денежной единицы.
sql_variant< $I[]sql_variant> Тип данных для сохранения значений различных данных, поддерживаемых SQL Server, за исключением text, ntext, timestamp и sql_variant.
text< $I[]text> Не-Unicode-данные переменной длины с максимальной длиной 2^31 - 1 (2, 147, 483, 647) символов.
varbinary< $I[]varbinary> Двоичные (бинарные) данные переменной длины с максимальной длиной 8000 байтов.
table< $I[]table> Специальный тип данных (табличный), который можно использовать для сохранения набора (для дальнейшей обработки).
timestamp< $I[]timestamp> Тип данных для автоматически генерируемых двоичных чисел. Которые являются гарантированно уникальными в базе данных. timestamp обычно используется как механизм для указания последовательности изменения строк таблиц. Размер — 8 байтов.
tinyint< $I[]tinyint> Целые числа от 0 до 255. Размер (в байтах) — 1.
uniqueidentifier< $I[]uniqueidentifier> Глобально уникальный идентификатор (globally unique identifier, GUID).
varchar< $I[]varchar> Не-Unicode-данные переменной длины с максимальной длиной 8000 символов.

Переменные — это самые обычные объекты любого языка программирования. В T-SQL используются локальные — их имена (идентификаторы) начинаются с префикса @ — и глобальные переменные, имена которых начинаются с двух символов @ и не создаются пользователем. Локальные переменные доступны в процедуре, в которой они описаны, и создаются при помощи оператора DECLARE < $I[] DECLARE > со следующим синтаксисом:

Синтаксис

DECLARE local_var1 data_type1 [, local_vari data_typei ]

Имя переменной (local_vari) должно начинаться с символа @ и отвечать «обычным» правилам именования переменных. Тип данных может быть любым системным типом, кроме text, ntext или image.

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

Синтаксис

DECLARE local_var1 TABLE [, local_vari data_typei ]

Имя переменной (local_vari) должно начинаться с символа @ и отвечать «обычным» правилам именования переменных.

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

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

Листинг 21.2 Процедура нахождения диапазона дат (dBegin_dEnd)

1: CREATE PROCEDURE dBegin_dEnd

2: /* возвращает набор из двух дат: */

3: /* наиболее ранняя и наиболее поздняя дата в таблице НаклЗаголовки */

4: AS

5: DECLARE @dat_b smalldatetime, @dat_e smalldatetime

6: /* создать временную таблицу с одним полем типа smalldatetime */

7: DECLARE @DATTEMP TABLE (Дата smalldatetime)

8: /* найти самую раннюю дату в таблице НаклЗаголовки */

9: SELECT TOP 1 @dat_b= Дата FROM НаклЗаголовки ORDER BY Дата ASC

10: /* найти самую позднюю дату в таблице НаклЗаголовки */

11: SELECT TOP 1 @dat_e= Дата FROM НаклЗаголовки ORDER BY Дата DESC

12: /* записать @dat_ b и @dat_e */

13: INSERT INTO @DATTEMP (Дата) VALUES (@dat_b)

14: INSERT INTO @DATTEMP (Дата) VALUES (@dat_e)

15: /* создать возвращаемый набор из двух дат */

16: SELECT * FROM @DATTEMP

Процедура dBegin_dEnd возвращает набор из двух дат. В строке 7 создается временная таблица @DATTEMP с одним полем типа smalldatetime. Код строки 7 записывает в локальную переменную @dat_b значение наиболее ранней даты таблицы НаклЗаголовки, а код строки 9 записывает в локальную переменную @dat_e значение наиболее поздней даты этой же таблицы. Обратите внимание на различие SELECT-инструкций этих строк: первая из них возвращает значение поля Дата первой строки (предикат TOP 1) после упорядочения по возрастанию строк таблицы по датам, а вторая — по убыванию (предикат DESC). Код строк 13–14 помещает значения переменных @dat_b, @dat_e во временную таблицу, а последняя строка (16) создает возвращаемый набор из двух дат.

Процедуру, возвращающую набор из двух дат, можно переписать, как показано ниже, без использования локальных переменных:

Листинг 21.3 Процедура нахождения диапазона дат (dBegin_dEnd1)

1: CREATE PROCEDURE dBegin_dEnd1

2: /* возвращает набор из двух дат: */

3: /* наиболее ранняя и наиболее поздняя дата в таблице НаклЗаголовки */

4: AS

5: /* создать временную таблицу с одним полем типа smalldatetime */

6: DECLARE @DATTEMP TABLE (Дата smalldatetime)

7: /* записать в таблицу @DATTEMP значение наименьшей даты */

8: INSERT INTO @DATTEMP

9: SELECT TOP 1 Дата FROM НаклЗаголовки ORDER BY Дата ASC

10: /* записать в таблицу @DATTEMP значение наибольшей даты */

11: INSERT INTO @DATTEMP

12: SELECT TOP 1 Дата FROM НаклЗаголовки ORDER BY Дата DESC

13: /* создать возвращаемый набор из двух дат */

14: SELECT * FROM @DATTEMP

В этой процедуре данные во временную таблицу добавляются как результаты запросов (строки 8–9 и 11–12). Эта процедура объявляет табличную переменную @DATTEMP (строка 5), записывает наименьшее (строки 6–7) и наибольшее (строки 8–9) значение поля Дата таблицы НаклЗаголовки во временную таблицу и (посредством последней инструкции) возвращает набор, состоящий их двух дат.

Табличные переменные можно использовать при объявлении курсора, но до выполнения инструкции OPEN следует заполнить табличную переменную данными.

Константа (также известная как литеральное или скалярное значение) — это специальным образом обозначаемое значение, которое не меняется в коде процедуры и подобно переменной принадлежит некоторому типу данных. Формат константы зависит от типа данных, к которому она относится. Например, строковые константы (character string constants) < $I[]строковые константы (character string constants)> заключаются в одиночные кавычки и могут включать алфавитно-цифровые (a–z, A–Z и 0–9) и специальные символы, такие как!, @, #. При необходимости включить в текстовую строку символа одиночной кавычки можно просто использовать две подряд одиночные кавычки, Например:

'Кафе''Голубая лагуна''открылось для посетителей! '

При опции QUOTED_IDENTIFIER, установленной (для подключения) в значение OFF, строковую константу можно заключать в двойные кавычки (double quotation marks), однако Microsoft OLE DB Provider for Microsoft SQL Server и ODBC драйвер автоматически используют установку SET QUOTED_IDENTIFIER ON. Поэтому рекомендуется использовать только одиночные кавычки.

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

Синтаксис

{ constant
| scalar_function
| [ alias. ] column
| local_variable
| (expression)
| (scalar_subquery)
| { unary_operator } expression
| expression { binary_operator } expression
}

Здесь scalar_function — скалярная функция — программная единица, которая предоставляет определенный сервис и возвращает единственное значение; может быть встроенной (например, SUM, GETDATE или CAST) или определенной пользователем; alias — (необязательное) алиасное имя, назначаемое таблице посредством слова AS в предложении FROM инструкции SELECT; column — имя столбца; local_variable — имя определенной пользователем (посредством DECLARE) локальной переменной; expression — любое допустимое для SQL Server выражение; scalar_subquery — подзапрос, возвращающий единственное значение, например, SELECT SUM(количество) FROM Запасы; unary_operator — унарный оператор (–, +, ~); binary_operator — бинарный оператор.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.