Работа с таблицами и типами данных. Типы данных. Символьные типы. Точные числовые типы. Приближенные числовые типы, страница 6

USE TestDB;

2.  В окне запроса создайте новый тип данных со следующими свойствами.

•  Он должен называться NAME.

•  Он должен находиться в схеме Test.

•  Это должна быть строка, содержащая символы Unicode, длиной до 70 символов.

CREATE TYPE Test.NAME FROM NVARCHAR(70); 

3.  В окне запроса создайте новый тип данных со следующими свойствами.

•  Он должен называться CURRENCYVALUE.

•  Он должен находиться в схеме Test.

•  Это должно быть точное число, которое может содержать до пяти знаков в дробной части и принимать значения до 999 999 999.99999.

CREATE TYPE Test.CURRENCYVALUE FROM DECIMAL(14,5);

Упражнение 3. Модификация существующей таблицы

Измените таблицу Test.Customers для того, чтобы воспользоваться новыми типами данных.

1. Откройте новое окно создания запроса, введите и выполните инструкцию для использования базы данных TestDB.

USE TestDB;

1. В окне запроса модифицируйте таблицу Test.Customers, внеся в нее следующие изменения:

o  замените тип данных столбца Name на тип Test.NAME.

o  замените тип данных столбца CreditLimit на тип Test.CURRENCYVALUE.

o  замените столбец CreatedDateTime, запретив в нем значение NULL.

ALTER TABLE Test.Customers

    ALTER COLUMN Name Test.NAME NOT NULL;

ALTER TABLE Test.Customers

    ALTER COLUMN CreditLimit Test.CURRENCYVALUE NULL;

ALTER TABLE Test.Customers

    ALTER COLUMN CreatedDateTime DATETIME2 NOT NULL;

Упражнение 4. Реализация сжатия данных

Пополнить таблицу 100 000 строками и затем сравнить занимаемый таблицей объем дискового пространства  в зависимости от примененного уровня сжатия данных.

1.  Откройте новое окно создания запроса, введите и выполните инструкцию для использования базы данных TestDB.

USE TestDB;

2.  В окне запроса введите, выделите и выполните следующий запрос для заполнения таблицы Test.Customers 100 000 строками.

INSERT Test.Customers (Name, CreatedDateTime, CreditLimit)

    SELECT TOP(100000)         so1.name

        ,SYSDATETIME()

        ,CASE

            WHEN ABS(so1.object_id) > 100000000 THEN NULL

            ELSE ABS(so1.object_id)

        END

    FROM sys.all_objects AS so1

    CROSS JOIN sys.all_objects AS so2;

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

ALTER TABLE Test.Customers

    REBUILD WITH (DATA_COMPRESSION = NONE);

EXEC sp_spaceused

    @objname = 'Test.Customers'

    ,@updateusage = 'true';

Обратите внимание на общий объем дискового простаранства, зарезервированный для таблицы и отображенный в хранимой процедуре sp_spaceused.

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

ALTER TABLE Test.Customers

    REBUILD WITH (DATA_COMPRESSION = ROW);

EXEC sp_spaceused

    @objname = 'Test.Customers'

    ,@updateusage = 'true';

Запомните общий объем дискового простаранства, зарезервированный для таблицы и отображенный в хранимой процедуре sp_spaceused.

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

ALTER TABLE Test.Customers

    REBUILD WITH (DATA_COMPRESSION = PAGE);

EXEC sp_spaceused

    @objname = 'Test.Customers'

    ,@updateusage = 'true';

Запомните общий объем дискового простаранства, зарезервированный для таблицы и отображенный в хранимой процедуре sp_spaceused.

6.  Удалите базу данных.

USE master;

GO

DROP DATABASE TestDB;