Введение в transact-sql



бет2/2
Дата06.01.2022
өлшемі109 Kb.
#12568
түріЛабораторная работа
1   2
Номер бита

Бит

(в десятичном виде)

Разрешенное действие

Без параметров

Object_id

Object_id
и атрибут


0

1

CREATE DATABASE

SELECT ALL

SELECT

1

2

CREATE TABLE

UPDATE ALL

UPDATE

2

4

CREATE PROCEDURE

REFERENCES ALL

REFERENCES

3

8

CREATE VIEW

INSERT




4

16

CREATE RULE

DELECT




5

32

CREATE DEFAULT

EXECUTE




6

64

BACKUP DATABASE







7

128

BACKUP LOG







8

256

Зарезервировано







12

4096




SELECT ANY




13

8192




UPDATE ANY




14

16384




REFERENCES ANY



В данном случае нас интересует младший (нулевой) бит – право на SELECT ALL.




  1. Пример вызова функции Permissions (рис. 2.2):

SELECT Permissions (object_id('production.product'))



Рис. 2.2. Результат функции Permissions


  1. Для определения того, задан ли интересующий нас бит, можно использовать битовую операцию «И» (&), тогда конечный вариант будет выглядеть следующим образом:

IF Permissions (object_id('production.product'))&1=1

SELECT 'Есть право выборки'

ELSE


SELECT 'Права выборки нет'

Рис. 2.3. Результат функции Permissions для вывода текстового описания




  1. Вместо оператора SELECT можно воспользоваться оператором PRINT, который просто позволяет выводить данные в виде текста, а не в виде таблицы, как это делает SELECT. Тогда код будет выглядеть так:

IF Permissions (object_id('production.product'))&1=1

PRINT 'Есть право выборки'

ELSE


PRINT 'Права выборки нет'
А результат будет выведен не на вкладку Results, а на вкладку Messages (рис. 2.4).

Рис. 2.4. Результат использования PRINT



Задание 3. Вывести имя компьютера, на котором выполняется команда. Если имя компьютера более девяти букв, то вывести только первые шесть букв.



Указания к выполнению:

  1. Для получения имени компьютера используется функция HOST_NAME().

  2. Для определения длины строки можно воспользоваться функцией DataLength.

  3. Пример выполнения задания:

IF (DATALENGTH(HOST_NAME()) / 2 > 9)

SELECT LEFT(HOST_Name(), 6) + '...'

ELSE


SELECT HOST_Name()
Замечание. Обратите внимание, что результат функции DATALENGTH мы разделили на два. Это обусловлено тем, что HOST_NAME() возвращает тип nvarchar, в котором под каждый символ отводится два байта.

Задание 4. Посчитать количество цифр в числе.



Указания к выполнению:

  1. Один из возможных вариантов решения данной задачи (см. рис.2.5):

DECLARE @num int, @cnt int

SET @num = 19

IF (@num = 0) SET @cnt = 1

ELSE BEGIN

SET @cnt = 0

WHILE (@num <> 0) BEGIN

SET @cnt = @cnt + 1

SET @num = @num / 10

END


END

SELECT @cnt AS 'Количество цифр'



Рис. 2.5. Результат работы кода

Самостоятельная работа





  1. Оптимизировать код решения задания 4: избавиться от условного оператора, должен остаться только цикл WHILE, при этом код должен по-прежнему работать как для нуля и положительных чисел, так и для отрицательных.




  1. Определить, имеет ли пользователь право доступа к полю 'CardNumber', таблицы CreditCard в базе данных AdventureWorks2008. Если доступ есть, то вывести «Доступ есть», иначе – «В доступе отказано».




  1. Написать программу пересчета веса из фунтов в килограммы (1 фунт равняется 453,6 г). Результат должен быть выведен следующим образом, например:


3.3 фунт(а/ов) – это 1 кг 496 г.


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


Вы вошли на сервер User400-01\SQL2008 как User400-01\User with dbo permissions.


  1. Определить количество часов и минут, прошедших со времени запуска служб MS SQL Server.




  1. Определить, является ли текущий год високосным.




  1. Найти сумму чисел в заданной строке символов.




  1. Определить величину оплаты за отправку телеграммы. Признаком завершения телеграммы является точка. Стоимость одного слова 33 коп, результат вывести с указанием количества рублей и копеек. Строка может содержать произвольное число пробелов.




  1. Используя шифр Цезаря, зашифруйте заданную строку текста. Идея данного метода шифрования – алфавит размещается как бы по часовой стрелке. Для шифровки буквы текста заменяются буквами, отстоящими на заданное число букв (сдвиг) по часовой стрелке.




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







Достарыңызбен бөлісу:
1   2




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет