|
2000 г
SQL Server в вопросах и ответах
Журнал "Windows 2000 Magazine", #03/2000
В: У меня на разных компьютерах установлено два SQL Server 7.0. Для обмена данными между ними я использовал Data Transformation Services (DTS), чтобы импортировать данные на компьютер-адресат. Выбрав нужные данные, я начал передавать их, и DTS выдал сообщение, что все объекты и данные импортированы успешно. Однако поля типа VARCHAR, ранее содержавшие 500-1000 слов, теперь, на компьютере-получателе, были установлены в NULL. Некоторые записи содержали кавычки Кавычки — парный знак препинания, который употребляется для выделения прямой речи, цитат, отсылок, названий литературных произведений, газет, журналов, предприятий, а также отдельных слов, если они включаются в текст не в своём обычном значении, используются в ироническом смысле, предлагаются впервые или, наоборот, как устаревшие, и т. п., и я предположил, что сервер "споткнулся" на этом. Однако если дело в кавычках, то SQL Server должен был бы корректно импортировать остальные данные - не содержащие кавычек. В чем моя ошибка?
О: Действительно, у DTS бывают сбои при обработке длинных символьных полей из больших массивов входных данных. Иногда эту проблему можно решить, убрав флажок Fast Load на закладке Advanced диалога Transformation Task Properties. Если не поможет, стоит попробовать использовать для импорта данных bulk copy program (bcp). Хотя bcp не так проста в применении, как DTS, это позволит избежать подобных ошибок. Для примера стоит прочитать статью Microsoft "BUG: DTS Transfer Does Not Report Error When Input File is Missing Text Qualifier in Last Row" http://support.microsoft.com/support/kb/articles/q241/7/61.asp, где подтверждается, что при передаче данных DTS не выдает сообщение об ошибке при импорте последней строки Строки (укр. Строки) — село в Теофипольском районе Хмельницкой области Украины. входного файла в таблицу SQL Server, если входной файл содержит текстовые описатели, а в последнем столбце такой описатель пропущен. Чтобы обойти это препятствие, следует вручную отредактировать входной файл.
Кроме того, описанную проблему могли вызвать системные настройки по обработке значений Null. Вопреки стандарту ANSI, SQL Server по умолчанию создает столбцы, не принимающие значений Null, если только явно не использовать соответствующие объявления в операторах CREATE TABLE или ALTER TABLE.
Странно, но и ODBC и OLE DB обходят эту установку. Можно попробовать использовать различные опции для тонкой настройки работы с Null. На уровне базы данных для выбора метода работы (ANSI, или режим обратной совместимости SQL Server) можно применять функцию sp_dboption. Кроме того, имеется возможность Возможность — направление развития, присутствующее в каждом явлении жизни; выступает и в качестве предстоящего, и вполне объяснимо рациональным путем: в каждой возможности присутствует вероятная невозможность, «возможность невозможного». Возможность не определяется познанием того, что может быть. Познание вероятностей, возможностей не всегда влияет на нашу возможность. На изучении возможности основывается, главным образом, исследование бытия и события. менять параметры установок конкретного сеанса связи с базой, с помощью команды Transact SQL (T-SQL) SET ANSI_NULL_DFLT {ON | OFF}, а для определения текущих установок обработки Null пользоваться функцией GETANSINULL().
В: Что такое утилита ScriptPkg в Data Transformation Services (DTS) и где ее найти?
О: Стандартный редактор пакетов Packag Designer из DTS имеет графический пользователь Пользователь— лицо или организация, которое использует действующую систему для выполнения конкретной функции.ский интерфейс Интерфейс (от англ.interface— поверхность раздела, перегородка)— совокупность средств, методов и правил взаимодействия между элементами системы. и построен на технологии COM. К сожалению, это средство не такое гибкое, как хотелось бы большинству разработчиков. Наибольшие нарекания у потребителей вызывает отсутствие в DTS удобного редактора сценариев. При возникновении проблем с пакетами DTS выясняется, что сообщения об ошибках DTS, которые SQL Server пишет в файл ошибок, - довольно туманные и почти бесполезные. Утилита ScriptPkg позволяет интегрировать пакет DTS в среду Visual Basic (VB). ScriptPkg - свободно распространяемое средство VB, которое можно использовать для генерации файлов VBScript для пакета DTS. Эта утилита поставляется на SQL Server 7.0 CD-ROM, но она так хорошо спрятана, что большинство пользователей о ней не знают. Чтобы найти и установить данную утилиту (на компьютере с VB 6.0), нужно сделать следующее.
- Распаковать файл DTSDemo.exe из каталога \DevTools\Samples\DTS на SQL Server 7.0 CD-ROM.
- В поддиректории Designer запустить проект VB - ScriptPkg.vbp.
- Из меню File в VB создать исполняемый файл под именем ScriptPkg.exe, как показано на Экране 1.
- Сформировать пакет DTS в SQL Server 7.0 Enterprise Manager, сохранить его на локальном SQL-сервере.
- Запустить ScriptPkg.exe, и ввести имя пакета. ScriptPkg создаст сценарий
Сценарий— литературно-драматическое произведение, написанное как основа для постановки кино- или телефильма. Сценарий в кинематографе, как правило, напоминает пьесу и подробно описывает каждую сцену и диалоги персонажей. Иногда сценарий представляет собой адаптацию отдельного литературного произведения для кинематографа, иногда в этом случае автор романа бывает и автором сценария (сценаристом). Сценарист-это человек, который пишет сценарий к фильму. Иногда многие сценаристы заняты в написании одного и того же сценария, прежде чем режиссер выберет лучший. Необязательно автор книги становится сценаристом при ее экранизации. Эта работа обычно отдается сценаристу. (например, packagename.txt) в каталоге \temp.
- Скопировать код из файла-сценария в свое VB-приложение. Добавить в свое приложение библиотеки Microsoft ActiveX Data Objects (ADO) версии 2.1 или выше и Microsoft DTS Package
Java package (пакет Java)— механизм, позволяющий организовать Java классы в пространства имен аналогично модулям в языке программирования Модула. Designer, или поэкспериментировать с тремя примерами VB DTS в каталоге \DevTools\Samples\DTS folder.
ScriptPkg записывает весь пакет DTS как одну процедуру, а размер процедуры в VB не может быть более 64 Кбайт. Поэтому, если сценарий ScriptPkg больше чем 64 Кбайт, надо вручную разбить его на несколько частей.
ScriptPkg - это мощное диагностическое средство, которое к тому же позволяет научиться DTS-программированию с применением технологии COM. Вы можете использовать ScriptPkg, чтобы изучить недокумент Документ (от лат.documentum— «образец, свидетельство, доказательство») — материальный объект, содержащий информацию в зафиксированном виде и специально предназначенный для её передачи во времени и пространстве .ированные возможности DTS. В дальнейшем знание VBScript пригодится Вам в решении задач администрирования SQL Server.
В: Я открыл небольшую телекоммуникационную фирму. Microsoft Visual FoxPro использовался мною в качестве среды разработки приложений и хранения данных. Я хотел бы импортировать ряд приложений в SQL Server. Однако мои приложения связаны с UDF, и я не знаю, как определить их в SQL Server. Я просматривал группы новостей и читал SQL Server 7.0 Books Online (BOL). Так поддерживает ли SQL Server 7.0 UDF или нет?
О: Совсем как в анекдоте - две новости: хорошая и плохая. Начну с плохой - SQL Server 7.0 функции UDF не поддерживает. Теперь хорошая новость: UDF будет поддерживать SQL Server 2000, который сейчас находится в стадии бета-тестирования. Между тем можно эмулировать UDF при помощи хранимых процедур, написанных на T-SQL, но этот метод многим представляется достаточно трудоемким и неэффективным.
Развивая затронутую Вами тему, отмечу, что пользователи FoxPro могут встречать следующие два сообщения об ошибка Ошибка— несоответствие между объектом или явлением, принятым за эталон (материальный объект, решение задачи, действие, которое привело бы к желаемому результату), и объектом/явлением, сопоставленным первому.х: "The Microsoft FoxPro driver is no longer supported and has been replaced by the Microsoft Visual FoxPro driver" и "Could not find installable ISAM." Для прояснения ситуации читайте статью Microsoft "PRB: FoxPro ODBC Driver Replaced by Visual FoxPro ODBC Driver" (пп. "Драйвер ODBC FoxPro заменен драйвером Visual FoxPro") http://support.microsoft.com/support/kb/articles/q235/3/57.asp.
В: С помощью каких средств были созданы данные для приложения FoodMart, которое поставляется вместе с Microsoft SQL Server OLAP Services (MSOLAP)? Почему для данных FoodMart использовалась база данных Access, а не таблицы SQL Server?
О: Microsoft поставляет данные для приложения FoodMart в формате .mdb потому, что не у каждого, кто желает использовать MSOLAP, есть установленный SQL-сервер. Многие забывают, что MSOLAP работает не только с SQL-сервером, но и с другими базами данных, например с такими, как Oracle8i. Поставка FoodMart в формате .mdb позволяет экспериментировать с MSOLAP без установки SQL-сервера. Наконец, если Вы планируете создать приложение на базе хранилища данных от Microsoft, то можете попрактиковаться, используя данные FoodMart в формате SQL-сервера. На Web-сайте SQL-сервера (http://www.microsoft.com/sql/productinfo/evalexercises.htm) можно взять несколько самораспаковывающихся и самонастраивающихся упражнений (см. Таблицу 1). На этом же сайте есть ознакомительные упражнения, которые помогут изучить методы репликации и модернизации.
В: Я установил новый экземпляр SQL Server 2000, и все утилиты SQL Server 7.0 пропали. Как мне их вернуть?
О: Хотя на одном компьютере можно запускать несколько экземпляров SQL-сервера, оставить на нем разные версии утилит нельзя. С новой версией SQL Server придется использовать соответствующие версии утилит (Query Analyzer, SQL Enterprise Manager, SEM, Microsoft Data Access Components, MDAC) для работы с SQL Server 7.0. Не устанавливайте новые экземпляры, если не хотите потерять старые версии утилит.
Теоретически можно "взломать" исполняемые модули и DLL или же внести необходимые изменения в системный реестр Реестр (от новолат.regestrum, лат.regestum, через польск. rejestr— список, перечень),, но в этом случае Вы рискуете нарушить стабильную работу системы. Пока мы не узнаем, как корректно обойти это ограничение, не стоит решаться на подобные эксперименты.
В: Я хотел бы хранить описания полей таблиц, их основных свойств, а также бизнес-свойств. Например, если у меня есть столбец OrderDate в таблице Orders, я должен знать, содержит ли поле дату размещения Количество размещений из n по k, обозначаемое sp_addextendedproperty 'WhatAmI2','This is a new property value','user', dbo, 'table', authors, 'column', au_id
Затем можно применить стандартный оператор SELECT с новой функцией fn_listextendedproperty, чтобы извлечь информацию:
SELECT * FROM ::fn_listextendedproperty(NULL, 'user', 'dbo','table','authors', 'column', default)
Objtype objname name value
COLUMN au_id WhatAmI I am the author id column!!!
COLUMN au_id WhatAmI2 This is a new property value
SELECT * FROM ::fn_listextendedproperty(NULL,'user','dbo','table', 'authors', 'column',default)
В: Я имею сертификат MCSE и собираюсь получить сертификат администратора БД (MCDBA). Я знаю, что для развертывания приложений SQL Server недостаточно прочитать специальную литературу. Тем не менее могли бы Вы рекомендовать какие-то источники информации для начинающих? У меня уже есть "Microsoft SQL Server 7.0 System Administration Training Kit" (Microsoft Press, 1999) и William Robert Stanek's "Microsoft SQL Server 7.0 Administrator's Pocket Consultant" (Microsoft Press, 1999).
О: Лучше всего разработать приложение (или прототип Прототип (от др.-греч. — первый и — отпечаток, оттиск)— прообраз, образец, оригинал.), которое решает реальные задачи. Советую придумать приложение для себя или создать базу данных для небольшой организации.
Чтобы приобрести дополнительный опыт, импортируйте необработанные статистические данные в новую базу данных MS SQL или OLAP куб и представьте, что Вы - конечный пользователь, который хочет проанализировать данные. Изучите OLAP и приложение Food Mart. Можно поэкспериментировать с приложением "Duwamish" - его Вы найдете в Microsoft Developer Network (MSDN). Установите и исследуйте его в целом и покомпонентно, пересоберите. Более полную информацию и примеры Вы найдете на сайте Microsoft: http://msdn.microsoft.com/voices/sampleapp.asp и http://msdn.microsoft.com/library/techart/d35vbaroot.htm.
Помимо этого, стоит присоединиться к группе новостей news://msnews.microsoft.com/microsoft.public.msdn.duwamish, а также посмотреть новые примеры приложений - Fitch и Mather Stocks на сайте http://msdn.microsoft.com/library/techart/fm2kintro.htm
В: Я писал хранимую процедуру и столкнулся с проблемой при использовании оператора TOP с локальной переменной вместо фиксированного числа. Например, когда я пишу:
DECLARE @Counter INT
SELECT @Counter=5
SELECT TOP @Counter * FROM <mytable>
процедура возвращает ошибку. Но строка
SELECT TOP 5 * FROM <mytable>
работает. Что делать в таком случае?
О: Согласно SQL Server Books Online (BOL), можно использовать N в разделе TOP, чтобы ограничить количество строк, возвращаемых в результате исполнения SELECT запроса. Но N должно быть числом типа integer. В SQL Server 7.0 язык Transact SQL (T-SQL) не позволяет задействовать локальную переменную в разделе TOP N, даже если та имеет тип integer. Локальные и глобальные переменные можно идентифицировать с помощью префиксов: @ - для локальных и @@ - для глобальных переменных. Можно также использовать оператор SET, чтобы присвоить значение локальной переменной, или же определить локальные переменные, ссылаясь на них в списке полей оператора SELECT. Следующий пример, вероятно, поможет решить Вашу задачу:
DECLARE @counter INT
DECLARE @sql VARCHAR(255)
SET @Counter=5
SELECT @sql = <SELECT TOP < + str(@counter) + < * FROM authors>
EXEC (@sql)
Это T-SQL-предложение динамически строит и выполняет строку T-SQL, возвращающую первые N строк запроса. Динамический T-SQL позволяет создавать такие команды T-SQL, которые невозможно применять при использовании стандартных T-SQL методов.
В: Как использовать функции, определяемые пользователем (UDF) с SQL Server 2000?
О: Использование UDF в хранимых процедурах позволяет переместить дополнительную бизнес-логику приложения на сервер. При разработке SQL Server 2000 специалисты Microsoft собирались включать поддержку для независимых от языка UDF (например, UDF, записанное в VBScript). К сожалению, в силу существующих программных ограничений, UDFs пока можно создавать лишь на языке SQL (T-SQL). Приведу пример из SQL Server 2000 Books Online (BOL), показывающий, как используется типичная UDF, написанная на T-SQL:
CREATE FUNCTION CubicVolume
-- Входные размеры в сантиметрах.
(@CubeLength decimal(4,1),
@CubeWidth decimal(4,1),
@CubeHeight decimal(4,1) )
RETURNS decimal(12,3) - Cubic centimeters.
AS
BEGIN
RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END
Данный сценарий создает функцию (хранимую на сервере), которая может использоваться в любом контексте, где SQL Server допускает применение десятичного выражения.
Карен Уоттерсон
независимый журналист, редактор и консультант по клиент-серверным системам и хранилищам данных. Ей можно написать по адресу: karen_watterson@msn.com.
Брайан Моран
президент Президент — де-юре выборная должность главы государства или территориально-административного образования либо председателя коллегиального органа, общественного объединения или коммерческой организации, а в некоторых странах (например, в США и в Турции) — также пожизненный титул лица, занимавшего такую должность в прошлом. В государствах с президентской формой правления президент является главой исполнительной власти, с парламентской — лишь главой государства. В некоторых странах по конституции президент кроме главы государства является также главой правительства. группы пользователей и директор по технологиям СУБД Spectrum Technology Group. Имеет сертификаты MCSE, MCSD и MCT. Ему можно написать по адресу: brian@spectrumtech.com.
Таблица 1. Microsoft SQL Server OLAP Services. Ознакомительные упражнения.
| File | Size | Description |
| SQL7Set.exe | 356 Кбайт | Обучение установке SQL-сервера. |
| FoodMart.exe | 4,9 Мбайт | Установка примера базы данных English Английский язык (англ.English, English language)— язык англичан (официальный язык Англии и фактически всей Великобритании), жителей США (официальный язык тридцати одного штата), один из двух официальных языков Ирландии, Канады и Мальты, официальный язык Австралии, Новой Зеландии. Он используется как официальный в некоторых государствах Азии (Индия, Пакистан и др.) и Африки. Говорящих на английском языке в лингвистике называют англофонами; особенно этот термин распространён в Канаде (в том числе в политическом контексте). Query. |
| DataTraS.exe | 283 Кбайт | Обучение работе с Data Transformation Services (DTS) для to перемещения данных из одной базы в другую. |
| LAPServ.exe | 650 Кбайт | Обучение возможностям MSOLAP 7.0 через построение многомерной базы данных, которую затем можно использовать для быстрого анализа больших массивов данных. |
|