Отправляет email-рассылки с помощью сервиса Sendsay

MS SQL Server

  Все выпуски  

MS SQL Server - дело тонкое...


Информационный Канал Subscribe.Ru


#187<<  #188

СОДЕРЖАНИЕ

1.СОВЕТЫ
1.1.SQL Server 2000 DTS. Часть 10. Задачи DTS Designer: Data Driven Query Task
2.ССЫЛКИ НА СТАТЬИ
2.1.Новые и обновлённые технические статьи Microsoft
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа

СОВЕТЫ

SQL Server 2000 DTS. Часть 10. Задачи DTS Designer: Data Driven Query Task

По материалам статьи Marcin Policht: SQL Server 2000 DTS Part 10 - DTS Designer Tasks - The Data Driven Query Task

В арсенале задач DTS Designer наиболее разносторонним и сложным является Data Driven Query Task. Его основной отличительной особенностью от других задач является не только возможность исполнения операций вставки записей в процессе трансформации, но и других инструкций T-SQL, таких как UPDATE, DELETE или запуск хранимых процедур. Правда, такая гибкость обходиться потерями производительности, так что лучше по возможности избегать использования этой задачи. Операции вставки записей наиболее эффективно исполняются описанными в предыдущих статьях Transform Data Task и Bulk Insert Task.
Прежде, чем мы приступим к подробному изучению работы этой задачи и примеров её использования, давайте уточним основную идею, на которой основана её функциональность. Короче говоря, само название "Data Driven Query" очень точно отражает механизм, используемый в этом случае для преобразования данных.
Преобразование каждой строки данных, передаваемой от источника адресату, разделено на две стадии. Вначале процессинг строки выполняется специализированным ActiveX скриптом. Логика этого скрипта подразумевает построчную обработку данных из источника (в дополнение к исполнению любых других необходимых задач), и, в зависимости от определяемых логикой условий (например, простое соответствие указанному значению значения какого-нибудь поля), может быть выполнена одна из составленных ранее инструкций TSQL. Обычно, используются параметризованные инструкции TSQL, параметры которых извлекаются средствами языка Data Driven Query из запрашиваемых таблиц или связанных таблиц. Как правило, это обычные табличные функции и получающие данные таблицы, хотя это и не обязательно (т.к. таблица получатель данных, указанная в инструкции TSQL, может быть любой таблицей, доступной через DTS подключение, используемое задачей Data Driven Query). Обратите внимание на то, что реальные изменения в таблице-получателе данных происходят только в результате исполнения заданной инструкции TSQL (которая может динамически изменяться в зависимости от значений в записях источника данных), использующей значения параметров, полученных из полей связанной таблицы (которые, в свою очередь, могут быть получены из основанного на ActiveX скрипта преобразования записей исходной таблицы).
Теперь поговорим о том, что характеризует основную цель этой задачи, и подробно рассмотрим каждый из её компонент (Вы можете увидеть эти компонентв в диалоговом окне Data Driven Query Task Properties), проиллюстрировав функциональные возможности этой задачи простым примером:

  • Source - предоставляет исходные данные для трансформации их ActiveX скриптом (поля его записей представляются как ключи DTSSource), который, являясь началом преобразования, определяет тип выполняемой инструкции TSQL. Это может быть значением, указывающим на тип последующей операции (UPDATE, DELETE или INSERT) или значением, из которого такая информация может быть получена (например, дата с которой будут удалены устаревшие записи). Кроме того, каждая исходная запись включает поля, используемые в качестве параметров в инструкциях TSQL, так как поля источника обычно отображаются на поля адресата (в рамках преобразования средствами ActiveX скрипта).
  • Bindings - указывает на содержащие данные поля таблицы, используемые в ActiveX преобразовании (ключи DTSDestination), и передаёт значения параметров для инструкции TSQL. Как говорилось ранее, реальные изменения в получающей данные таблице выполняются обычно не в коде ActiveX скрипта преобразования, а непосредственно с помощью инструкции TSQL. Это означает, что в случаях, когда привязываемая таблица не является получающей данные таблицей (т.е. таблицей-адресатом, указанной в инструкции TSQL), её данные вообще не будут изменяться. Обычно, тем не менее, привязываемая таблица также является и получающей данные таблицей.
  • Transformations - определяет преобразование между источником и привязываемой таблицей. По умолчанию, это ActiveX скрипт, выполняемый как функция Row Transform (Data Driven Query также является многофазной, как и описанная ранее задача Multi-Phase Data Pump). Используемый для этого интерфейс (включая диалоговое окно Transformation Options) практически идентичен интерфейсу Multi-Phase Data Pump, хотя там вместо закладки Binding Columns используется закладка Target Columns. Однако, более существенными являются различия в структуре ActiveX скрипта. В частности помимо уже знакомого отображения между полями DTSSOURCE и DSTDESTINATION, ActiveX скрипт предоставляет возможность запустить на исполнение одну из четырех возможных инструкций TSQL для каждой строки трансформируемых данных. Выбор инструкции, которая будет исполнена, зависит от значения, возвращенного функцией Row Transform, представленной одной из четырех констант:
    • DTSTransformStat_InsertQuery - указывает на то, что будет выполнена инструкция INSERT;
    • DTSTransformStat_UpdateQuery - указывает на то, что будет выполнена инструкция UPDATE;
    • DTSTransformStat_DeleteQuery - указывает на то, что будет выполнена инструкция DELETE;
    • DTSTransformStat_UserQuery - указывает на то, что будет выполнена произвольно выбранная инструкция (UPDATE, DELETE или INSERT).
    Обратите внимание на то, что несмотря на содержание в именах этих констант имени выполняемого оператора, они используются только в качестве идентифицирующих меток тех четырех инструкций TSQL, которые Вы предварительно создали и хотите исполнить. Соответствующие этим меткам инструкции TSQL, на самом деле, могут содержать действия любого типа, и не обязательно те, которые соответствуют имени метки.
  • Queries - содержит четыре метки для параметризованной инструкции TSQL. Эти метки-заполнители идентифицируют INSERT, UPDATE, DELETE и SELECT. Они соответствуют четырем разным возвращаемым ActiveX скриптом значениям (как описано выше). По умолчанию, параметры указаны в том порядке, в каком они появляются в запросе, для чего используя последовательность полей привязываемой таблицы. Вы можете проследить схему отображения параметров к полям, нажимая на кнопке Parse/Show Parameters command (при этом, схема о тображения появится в нижней части диалогового окна). Чтобы изменять заданную по умолчанию схему, просто кликните оп соответствующей полю-адресату записи в нижней части диалогового окна и выберите то поле привязываемой таблицы, которое Вы хотите отобразить на нужный параметр.
  • Lookups - как уже говорилось ранее в статьях этого цикла, с помощью Lookups Вы можете получать или устанавливать значения с помощью дополнительного DTS подключения внутри основанного на ActiveX скрипте преобразования. Каждое такое дополнительное подключение имеет уникальное имя, имя подключения, свои установки кэша (число кэшируемых результатов поиска) и SQL запрос, который определяет поисковую операцию. Запрос составляется с помощью DTS Query Designer и может иметь один или более параметров (которые обычно обозначаются вопросительными знаками, заменяемыми значениями из глобальных переменных DTS во время исполнения преобразования). Для получения подробной информации о Lookups изучите одну из предыдущих статей этого цикла о Transform Data Task.
  • Options - содержит подмножество конфигурационных параметров (позволяющих определить файл исключений и его формат, а так же параметры передачи данных, таких как первая и последняя строка, максимальное число возможных ошибок и размер буфера выборки), которые мы описали в нашей предыдущей статье при рассмотрении закладки Options диалогового окна Properties задачи Transform Data.

Теперь пришло время рассмотреть, как используются описанные выше компоненты на очень простом примере. Нашим источником данных будет текстовый файл, содержащий записи, которые будут использоваться для изменений в таблице Shippers базы данных Northwind. Формат файла с разделителем в виде точки с запятой, а содержать он будет следующие строки:


Update;1;Super Speedy Express;(503) 555-9831
Update;2;Offshored Package;91 (123) 555-3199
Insert;4;Road Runner;(503) 555-1234
Insert;5;Speedy Gonzalez;(503) 555-4321
Delete;4;Road Runner;(503) 555-1234

Скопируйте эти пять строк в текстовый файл и сохраните его (место и имя можно выбрать произвольно). Как Вы могли уже догадаться, первое поле указывает на тип выполняемого изменения, второе - это идентификатор строки, а последние два (название и телефон компании) используются для создания новой записи или изменения существующей (очевидно, они не существенны в случае удаления). Строка номер 4 будет вставлена, а затем удалена (в целях демонстрации). Обратите внимание на то, что мы не можем просто удалить три уже существующие строки таблицы Shippers из-за ограничений ссылочной целостности. После того, как DTS задача будет исполнена, первые две строки должны измениться, а пятая строка будет добавлена (со значением поля ShipperID равным 5).
Мы будем использовать таблицу Shippers в качестве привязываемой (а так же и получающей данные) таблицы. Так как источник и привязываемая таблицы требуют отдельных подключений, мы должны создать их. Первый источник имеет тип Text File (Source), Вы можете определить его местонахождение в меню Connection или на инструментальной панели окна DTS Designer. Укажите имя файла, который Вы только что сохранили, и выберете формат файла - Delimited. В качестве разделителей строк будет символ {CR}{LF}, а в качестве разделителя полей - точка с запятой (semicolon), который (как и Text qualifier) можно оставить в предлагаемом по умолчанию значении. Подключение для получающей данные таблицы будет стандартным Microsoft OLE DB Provider for SQL Server, указывающим на базу данных Northwind вашего тестового SQL сервера.
Как только подключения будут созданы, выберете из меню Task в DTS Designer задачу Data Driven Query (или перетащите её в рабочую область с инструментальной панели). Что бы убедиться в том, что подключение Text File (которое вы должны выбрать для поля Connection на закладке Source) будет использоваться правильно, нажмите кнопку Preview, и Вы должны увидеть хранимые в созданном Вами файле данные. На закладке Bindings, выберите подключение к базе данных Northwind и таблицу Shippers. На следующей закладке удалите заданное по умолчанию преобразование. Нажмите кнопку New, выберете в диалоговом окне Create New Transformation пункт ActiveX Script. Появится окно Transformation Options, в котором на закладке Columns Source нужно перенести в правую область всё поля (Col001 - Col004) и проверить, что на закладке Binding Columns указаны все колонки привязываемой таблицы. На закладке General, нажмите кнопку Properties, и Вы увидите в открывшемся окне следующий, автоматически созданный шаблон скрипта преобразования:


Function Main()
 DTSDestination("ShipperID") = DTSSource("Col001")
 DTSDestination("CompanyName") = DTSSource("Col002")
 DTSDestination("Phone") = DTSSource("Col003")
 Main = DTSTransformstat_InsertQuery
End Function

Замените его на другой (см. ниже), который будет анализировать значение первого поля и, в зависимости от этого, определять какая инструкция будет исполнена для анализируемой строки:


Function Main()
 Select Case UCase(Trim(DTSSource("Col001")))
  Case "UPDATE"
   DTSDestination("ShipperID") = DTSSource("Col002")
   DTSDestination("CompanyName") = DTSSource("Col003")
   DTSDestination("Phone") = DTSSource("Col004")
   Main = DTSTransformstat_UpdateQuery
  Case "INSERT"
   DTSDestination("ShipperID") = DTSSource("Col002")
   DTSDestination("CompanyName") = DTSSource("Col003")
   DTSDestination("Phone") = DTSSource("Col004")
   Main = DTSTransformstat_InsertQuery
  Case "DELETE"
   DTSDestination("ShipperID") = DTSSource("Col002")
   Main = DTSTransformstat_DeleteQuery
  Case ELSE
   Main = DTSTransformstat_UserQuery   
 End Select       
End Function

Подтвердите сделанные изменения, нажав кнопку OK, и возвращайтесь в диалоговое окно Data Driven Query Task Properties. На закладке Queries заполните представленные ниже инструкции для типов запросов (INSERT, UPDATE и DELETE) следующим TSQL кодом (по одному для каждого типа):


INSERT Shippers ([CompanyName],[Phone])
VALUES (?, ?)

UPDATE Shippers
SET CompanyName = ?, Phone = ?
WHERE (ShipperID = ?)

DELETE FROM Shippers
WHERE ShipperID = ?

При этом для каждой инструкции стоит нажимать кнопку Parse/Show Parameters, что бы проверить соответствие параметров полям получающей данные таблицы Shippers. Предлагаемое по умолчанию отображение параметров на поля таблицы Shippers нужно изменить для получения верного соответствия, нажав левую кнопку мыши на перечисленных в нижней части диалогового окна именах полей принимающей данные таблицы (это будет необходимо сделать для инструкций INSERT и UPDATE). Наконец, нажмите кнопку OK, чтобы закрыть диалоговое окно Data Driven Query Task Properties, после чего сохраните и выполните этот пакет. После этого, Вы можете проверить, что содержимое таблицы Shippers было изменено так, как мы ожидали, для чего можно использовать стандартные методы просмотра данных таблицы (Query Analyzer или Enterprise Manager):


1  Super Speedy Express  (503) 555-9831 
2  Offshored Package     91 (123) 555-3199 
3  Federal Shipping      (503) 555-9931 
5  Speedy Gonzalez       (503) 555-4321

Работа этой задачи может использоваться Вами в качестве примера для разработки собственных пакетов, включая задачу Data Driven Query. Для изучения других примеров, можно обратиться к Books Online. Мы завершим рассмотрение задач DTS в следующей статье этого цикла.

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке

Практическое использование особенностей .Net CLR в новой версии сервера MS SQL 'Yukon'
Чужа В.Ф.
В тот раз, когда я впервые был представлен Цыплёнку в Ореховом Масле, у меня родилось множество вопросов. Каков он на вкус? Почему кто-то решил совместить Ореховое Масло и Цыплёнка? Как всё это готовится? Чья вообще это была идея? Попробовав первый же кусочек, я попался на крючок на всю оставшуюся жизнь.Когда я впервые услышал о том, что следующая версия Microsoft SQL Server 'Yukon' будет хостить .NET Common Language Runtime (CLR), у меня возникли похожие вопросы: Зачем это было сделано? Как я могу воспользоваться преимуществами такого подхода? Через несколько минут я обнаружил себя просматривающим примеры использования преимуществ такой модели, которые, откровенно говоря, не убеждали меня, что это хороший повод применения той или иной особенности. В действительност...
Сложные структуры в реляционных базах данных
Максим Гладков, Сергей Шибанов
Известно немало подходов к организации хранения сложных структур данных - массивов, списков, деревьев, сетей, графов и их комбинаций. Часто для этого требуется создавать собственное программное обеспечение, управляющее записью, чтением и поиском данных в файлах, либо использовать уже готовые средства. Альтернативный подход состоит в применении технологий СУБД, однако при этом возникает проблема отображения сложных структур данных в модель базы данных...

[В начало]

Новые и обновлённые технические статьи Microsoft

BUG: A transfer of data from a SQL Server CE database to a remote SQL Server database fails when you use the Push method in SQL Server CE Remote Data Access
BUG: You cannot install SQL Server Desktop Engine on a computer that has an operating system locale that does not have a default SQL Server collation mapping
FIX: An attention signal that is sent from a SQL Server client application because of a query time-out may cause the SQL Server service to quit unexpectedly
FIX: Registered remote servers disappear from SQL Enterprise Manager in Windows XP when user password is changed
FIX: Sqlakw32.dll May Corrupt SQL Statements
FIX: SQLBrowseConnect May Cause an Access Violation in the Client Application
FIX: When you run an MDX query on a write-enabled cube, the query returns #Err, or the query fails and you receive an "Unable to open cellset..." error message in SQL Server 2000 Analysis Services
FIX: You may receive an "Internal SQL Server error" error message when you run a Transact-SQL SELECT statement on a view that has many subqueries in SQL Server 2000
How to access SQL Server in Active Server Pages
How to set up a linked server to a Sybase database server and troubleshoot problems that may occur
INF: Authentication Methods for Connections to SQL Server in Active Server Pages
INF: Cross-Database Ownership Chaining Behavior Changes in SQL Server 2000 Service Pack 3
INF: Default Data and Log Directory Display Blank by Default After You Install SQL Server 2000
INF: Frequently Asked Questions - SQL Server 2000 - Setup
INF: Moving SQL Server databases to a new location with Detach/Attach
INF: SQL Server 2000 Kerberos support including SQL Server virtual servers on server clusters
Missing Windows NT LM Security Support Provider registry key causes "Cannot Generate SSPI Context" error message when you connect to SQL Server
PRB: ExOleDB Provider Doesn't Work with SQL Server 2000 DTS Tool
PRB: SQL 2000 Profiler Doesn't Capture SHOWPLAN Events if the BinaryData Data Column Is Not Captured
SQL Server 2000 High Availability Series Chapter Discusses a Configuration That Is Not Supported
TechNet Support WebCast: Administering and maintaining the tempdb system database in Microsoft SQL Server

[В начало]

Англоязычные статьи

Compare 4 key programming languages
Examine Microsoft Visual Studio® programming languages side by side to find the right one for you.
Introduction to MSSQL Server 2000 Analysis Services: Putting Actions to Work in Regular Cubes
William Pearson
In this article, we will examine Actions, a powerful feature in MSAS that allows information consumers to go beyond the robust OLAP perspective offered by the application, and to "step outside" for related information, or to generate commands or initialize programs, without leaving their current analysis focus. As we shall see, Actions can be structured into the cube by the developer, to allow users to perform these extended activities from various vantage points, with a simple right-click of the mouse. This saves analysts and other consumers time, as the complementary information can be "linked" through the Action design for them, and, perhaps more importantly, because they can perform the Actions without leaving their current position within the analysis they are performing in MSAS
SQL Server 2000 DTS Part 11 - DTS Designer Tasks - the Message Queue task
Marcin Policht
It is finally time to complete our coverage of DTS tasks - the only remaining one that we have not presented yet is the Message Queue task. However, before we describe its features and provide an example demonstrating their use, let's first spend some time discussing the concept of message queuing and its Microsoft-specific implementation
Simplifying Your Application Development with the SQL MERGE Statement
Roman B. Melnyk and Paul C. Zikopoulos
Today's efficient businesses strive to balance the cost savings of a just-in-time (JIT) inventory system with the potential for lost sales resulting from stock-out situations. A common database design for a JIT procurement system is to have a "master" table that contains up-to-date information about a particular domain of the business. One example is a PARTS table that tracks inventory. When key performance indicators in this table fall below certain thresholds, business logic is invoked to replenish the stock, thereby avoiding stock-out conditions and lost sales. Another table (for example, an ORDERS table) handles transactions. This table contains the changes that must be applied to the master table to consolidate inventory levels for future sales. For example, a particular item was ordered and now the on-hand inventory must be decreased by one. The ORDERS table could also include returned product that was shipped from a different distribution center. This "not-on-hand" type of inventory must also be accounted for
Review of Programming Microsoft SQL Server 2000 with Microsoft Visual
James Travis
First let me say the book in my opinion is more for some who has almost no experience with SQL Server 2000 or Visual Basic .NET. It seemed like 704 pages of rehashed material from SQL BOL and MSDN library more than anything. The book was very repetitive of a number of the concepts and technical info and thou the back presents the book as "Solution Design/Coding/Implementing". I felt let down and disappointed
Dump SQL Permissions
Chad Miller
A few years I was troubleshooting an issue with share and NTFS permissions and I ran across a nice little utility called DumpSec from SomarSoft which generates reports on permissions and user accounts for an Windows based system. You can obtain DumpSec from SomarSoft (http://www.systemtools.com/somarsoft/) it’s a utility for auditing and reporting of NTFS and share security, users and groups, audit settings, registry permissions, and user rights assignment
The .NET Connection Pool Lifeguard
William Vaughn
Prevent pool overflows that can drown your applications. Most ADO.NET data providers use connection pooling to improve the performance of applications built around Microsoft's disconnected .NET architecture. An application opens a connection (or gets a connection handle from the pool), runs one or more queries, processes the rowset, and releases the connection back to the pool. Without connection pooling, these applications would spend a lot of additional time opening and closing connections
Step on the BI Accelerator
Brian Moran
If you're dying to dabble with business intelligence (BI), but don't know where to start, you might want to investigate SQL Server Accelerator for Business Intelligence. On June 25, 2003, Microsoft announced the product's latest release, which includes several improvements on the older version
A tutorial about using and creating JOINS and UNIONs
Goldmine Services
Each database management system (DBMS) offers an application that you can use to query the databases in your system. In Microsoft's SQL Server product, the SQL Query Analyzer application provides the environment for making SQL queries. Of course, in a production environment, you might not use these query tools to access the database. Instead, you will probably use custom applications, Web pages, or other front-end applications to perform your actual querying tasks
How to Perform a SQL Server Performance Audit
Brad McGehee
This lengthy article written by Brad, explains how to check the performance of your SQL Server
Enhanced SQL Server Security Auditing
Muthusamy Anantha Kumar
Security audit in SQL server captures only successful and failed logins. It does not capture the application that uses the login. Login used by an application may have full read and write access on all of the tables and procedures but the application restricts the users by providing a front-end which will allow them to see only a few columns, tables etc. However, certain users out of curiosity may log on to the database using SQL Query tools such as Enterprise manager and Query analyzer, using production login information. The following process will capture such un-authorized users who log on to the SQL server

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
Кто на чем пишет клиентов под SQL Server?
Новость No.2 - FTP SQL.RU
База данных - хранилище объектов.
Нынче по небу правильно солнце идет
Таблицы без identity
Связать 2 таблицы по 2 полям
Отлов select
Подскажите пожалуйста красивое решение для такой задачки.
Помогите новичку
результат динамического select
непосильная логика в выборке
Как в MS SQL Server 2000 просмотреть журнал транзакций базы .ldf
Упал SQL 2003
Производительность: создавать временные таблицы или постараться обойтись без них
INSERT с двумя SELECT-ами?
табличная переменная и тормоза
Запрос
Вопрос по Analisys Servises
Из жизни триггеров...

[В начало]

Вопросы остались без ответа

Idbigint и Delphi
Конвертация из 1С
sql2000 64 bit
оповещения
Вопрос про BULK INSERT и INSERT BULK
Windows & .NET Magazine UPDATE--Yukon Delay
Что бы Вы хотели увидеть в MS SQL Server 2005?
запись данных из поле типа image в файл
И опять 1204
Скрипт БД на T-SQL
Restore файловой группы на другой сервер
просто TRIGGER
arithabort и (план запроса + время выполнения)
MSDTC умер?

[В начало]


Вопросы, предложения, коментарии, замечания, критику и т.п. присылайте Александру Гладченко на адрес: mssqlhelp@km.ru

sql.ru Описание рассылки

МИНИФОРМА
ПОДПИСКИ




http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное