Студопедия
Главная страница | Контакты | Случайная страница

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

ProblemForExamSQLQuery13.sql - Solution

Читайте также:
  1. ProblemForExamSQLQuery04.sql - Solution
  2. ProblemForExamSQLQuery09.sql – Solution
  3. ProblemForExamSQLQuery16.sql - Solution
  4. ProblemForExamSQLQuery19.sql – Solution
  5. ProblemForExamSQLQuery20.sql – Solution
  6. ProblemForExamSQLQuery25.sql – Solution

 

USE demodb

GO

IF OBJECT_ID ('dbo.TranslateSimpleXml', 'P') IS NOT NULL

DROP PROCEDURE dbo.TranslateSimpleXml;

GO

CREATE PROCEDURE dbo.TranslateSimpleXml (@xml_file varchar(100))

AS

BEGIN

DECLARE @idoc int, @doc varchar(8000) = '', @xml_line varchar(200), @bulkinscmd varchar(500)

-- Insert XML file into temporary table

CREATE TABLE #tempXML (Line varchar(8000))

SET @bulkinscmd = 'BULK INSERT #tempXML FROM ''' + @xml_file + ''''

EXEC (@bulkinscmd)

SELECT * FROM #tempXML

DECLARE xml_cursor CURSOR FOR

SELECT * FROM #tempXML

-- Create XML string in SQL SERVER memory

OPEN xml_cursor

FETCH NEXT FROM xml_cursor INTO @xml_line

WHILE @@FETCH_STATUS = 0

BEGIN

SET @doc = @doc + RTRIM(LTRIM(@xml_line))

FETCH NEXT FROM xml_cursor INTO @xml_line

END

CLOSE xml_cursor

DEALLOCATE xml_cursor

DROP TABLE #tempXML

-- Create an internal representation of the XML document.

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT text

FROM OPENXML (@idoc, '/ROOT/LINE', 1)

WHERE text is not null

EXEC sp_xml_removedocument @idoc

END

GO

EXEC TranslateSimpleXml 'd:\dict.xml'

GO

<ROOT>

<LINE>

<NAME>SUBJECT</NAME>

<VALUE>ELI SECTION</VALUE>

</LINE>

<LINE>

<NAME>THE PLANT</NAME>

<VALUE>IEC factory</VALUE>

</LINE>

<LINE>

<NAME>CREATE DATE</NAME>

<VALUE>01/07/2004</VALUE>

</LINE>

</ROOT>

 

text

-----------------

SUBJECT

ELI SECTION

THE PLANT

IEC factory

CREATE DATE

01/07/2004

 

(6 rows affected)

 

 

Вариант 14

 

Написать и протестировать сценарий на T-SQL, в котором осуществляется поиск потенциально опасных ключевых слов в хранимых процедурах текущей базы данных. Таким ключевым словом считать слово 'EXEC'. Сценарий выводит инструкцию 'EXEC' и командную строку, которую она выполняет.

 

---------------------

/*

Сценарий поиска потенциально опасных ключевых слов в хранимых процедурах. В данном случае таким ключевым словом является 'EXEC'.

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

*/

USE Northwind

GO

DECLARE @i int, @j int, @current_proc varchar(255),@current_text varchar(8000)

DECLARE _Cursor CURSOR FOR

SELECT o.name, m.definition

FROM sys.objects o INNER JOIN sys.sql_modules m ON o.object_id = m.object_id

WHERE o.type='P' AND m.definition IS NOT NULL

OPEN _Cursor

FETCH NEXT FROM _Cursor INTO @current_proc, @current_text

WHILE @@FETCH_STATUS = 0

BEGIN

SET @i=0

lblAgain: SET @i=CHARINDEX('EXEC', @current_text, @i)

SET @j=CHARINDEX(CHAR(13), @current_text, @i)-@i

IF @j<0

SET @j=DATALENGTH(@current_text)-@i+1

IF @i>0

BEGIN

PRINT @current_proc

PRINT ' '+SUBSTRING(@current_text, @i, @j)

SET @i=@i+1

GOTO lblAgain

END

FETCH NEXT FROM _Cursor INTO @current_proc, @current_text

END

CLOSE _Cursor

DEALLOCATE _Cursor

GO

 

 

-------------------------

(Горшков)

 

USE Lab_01

GO

CREATE PROCEDURE MetadataWorker

AS

DECLARE @exec_string varchar(40)

DECLARE [CURSOR] CURSOR

GLOBAL

FOR

SELECT SUBSTRING(sm.definition, CHARINDEX('EXEC',sm.definition, 0), 60)

FROM sys.sql_modules AS sm

JOIN sys.objects AS o ON sm.object_id = o.object_id

WHERE CHARINDEX('EXEC',sm.definition) <> 0 AND OBJECT_NAME(sm.object_id) <> 'MetadataWorker' AND o.type = 'P' AND SUBSTRING(sm.definition, CHARINDEX('EXEC',sm.definition, 0), 40)<>'';

OPEN [Cursor];

FETCH NEXT FROM [CURSOR] INTO @exec_string;

PRINT CONVERT(varchar, @exec_string);

CLOSE [Cursor];

DEALLOCATE [Cursor];

GO

 

EXEC MetadataWorker

GO

DROP procedure dbo.MetadataWorker

 

 

Вариант 15

 

В базе данных Northwind создать таблицу Orders_Audit типа таблицы Orders с одним дополнительным столбцом: DateAdded DATETIME NOT NULL DEFAULT GETDATE(). Затем создать и протестировать SQL DML триггер AFTER на событие UPDATE для таблицы Orders, который в случае обновления столбцов ShippedDate и/или RequiredDate добавляет старый образ строки в таблицу Orders_Audit.

 

-- это неправильно, кто доведёт до ума, скажите --

 

CREATE TRIGGER Var15

ON Orders

AFTER UPDATE

AS

IF (UPDATE (ShippedDate) OR UPDATE (RequiredDate))

BEGIN

insert into Orders_Audit (/* ïåðå÷èñëèòü ïîëÿ */)

values (

select *

from Orders

where deleted.ShippedDate <> Orders.ShippedDate

or deleted.RequiredDate <> Orders.RequiredDate

)

END;

GO

 

Вариант 16

 

Создать и протестировать хранимую процедуру на T-SQL, которая удаляет все SQL DML триггеры для таблиц в схеме 'dbo' в текущей базе данных. Выходной параметр процедуры возвращает количество удаленных триггеров.

----------------

(Антон)

 

CREATE PROC dbo.DropDMLTrigger @count INT OUTPUT

AS

DECLARE @t1 varchar(1000)

DECLARE @sqlstr varchar(4000)

DECLARE st SCROLL CURSOR FOR

SELECT s1 = ob.name FROM sys.objects AS ob WHERE OBJECTPROPERTY(ob.object_id, N'IsTrigger') = 1 AND ob.type = 'TR'

OPEN st

FETCH NEXT FROM st INTO @t1

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT @sqlstr = 'DROP TRIGGER ' + @t1

EXEC (@sqlstr)

SET @count = @count + 1

FETCH NEXT FROM st INTO @t1

END

CLOSE st

DEALLOCATE st

GO

DECLARE @num INT = 0

EXEC dbo.DropDMLTrigger @num OUTPUT

SELECT @num

GO

 

--------------------




Дата добавления: 2015-02-16; просмотров: 59 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.022 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав