FAQ по MS SQL Server |
Ответ: Использование 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 допускает применение десятичного выражения.
Ответ: Согласно 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 методов.
Ответ: Лучше всего разработать приложение (или прототип), которое решает реальные задачи. Советую придумать приложение для себя или создать базу данных для небольшой организации.
Чтобы приобрести дополнительный опыт, импортируйте необработанные статистические данные в новую базу данных 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
Ответ: 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). На этом же сайте есть ознакомительные упражнения, которые помогут изучить методы репликации и модернизации.
Таблица 1. Microsoft SQL Server OLAP Services.
Ознакомительные упражнения.
File | Size | Description |
SQL7Set.exe | 356 Кбайт | Обучение установке SQL-сервера. |
FoodMart.exe | 4,9 Мбайт | Установка примера базы данных English Query. |
DataTraS.exe | 283 Кбайт | Обучение работе с Data Transformation Services (DTS) для to перемещения данных из одной базы в другую. |
LAPServ.exe | 650 Кбайт | Обучение возможностям MSOLAP 7.0 через построение многомерной базы данных, которую затем можно использовать для быстрого анализа больших массивов данных. |
Ответ: Стандартный редактор пакетов Packag Designer из DTS имеет графический пользовательский интерфейс и построен на технологии COM. К сожалению, это средство не такое гибкое, как хотелось бы большинству разработчиков. Наибольшие нарекания у потребителей вызывает отсутствие в DTS удобного редактора сценариев. При возникновении проблем с пакетами DTS выясняется, что сообщения об ошибках DTS, которые SQL Server пишет в файл ошибок, - довольно туманны и почти бесполезны. Утилита ScriptPkg позволяет интегрировать пакет DTS в среду Visual Basic (VB). ScriptPkg - свободно распространяемое средство VB, которое можно использовать для генерации файлов VBScript для пакета DTS. Эта утилита поставляется на SQL Server 7.0 CD-ROM, но она так глубоко "запрятана", что большинство пользователей о ней не знают. Чтобы ее найти и установить (на компьютере с VB 6.0), нужно сделать следующее.
ScriptPkg записывает весь пакет DTS как одну процедуру, а размер процедуры в VB не может быть более 64 Кбайт. Поэтому, если сценарий ScriptPkg больше чем 64 Кбайт, надо вручную разбить его на несколько частей.
ScriptPkg - это мощное диагностическое средство, которое к тому же позволяет научиться DTS-программированию с применением технологии COM. Вы можете использовать ScriptPkg, чтобы изучить недокументированные возможности DTS. В дальнейшем знание VBScript пригодится Вам в решении задач администрирования 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"), где подтверждается, что при передаче данных 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().
Ответ: Совсем как в анекдоте - две новости: хорошая и плохая. Начну с плохой - 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 ).
Ответ: Хотя на одном компьютере можно запускать несколько экземпляров SQL-сервера, оставить на нем разные версии утилит нельзя. С новой версией SQL Server придется использовать соответствующие версии утилит (Query Analyzer, SQL Enterprise Manager, SEM, Microsoft Data Access Components, MDAC) для работы с SQL Server 7.0. Не устанавливайте новые экземпляры, если не хотите потерять старые версии утилит.
Теоретически можно "взломать" исполняемые модули и DLL или же внести необходимые изменения в системный реестр, но в этом случае Вы рискуете нарушить стабильную работу системы. Пока мы не узнаем, как корректно обойти это ограничение, не стоит решаться на подобные эксперименты.
Ответ: SQL Server 2000 позволяет хранить дополнительные свойства многих типов объектов базы данных. Дополнительные свойства определяются пользователем и имеют тип SQL_VARIANT. Программисты, работающие с VB, знакомы с типом данных VARIANT. Подобно типу данных в VB, SQL_VARIANT позволяет хранить различные типы данных в поле, параметре или переменной. Каждый экземпляр столбца SQL_VARIANT состоит из двух частей: собственно данные и метаданные, описывающие значение (например базовый тип данных поля, максимальный размер, точность и collation - сопоставление). Для получения мета-данных экземпляра SQL_VARIANT можно использовать функцию SQL_VARIANT_ PROPERTY.
Например, чтобы сохранить описание столбца au_id в таблице authors в базе данных pubs, нужно щелкнуть правой кнопкой мыши на имени столбца в окне Object Browser (новый интерфейс Query Analyzer), затем выбрать Extended Properties. Теперь следует добавить новое свойство WhatAmI и внести значение "I am the author id column!!!". То же самое можно сделать, используя процедуру sp_addextendedproperty:
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)
За дополнительной информацией обращайтесь в компанию Interface Ltd.
INTERFACE Ltd. |
|