Обновлено: 02 мая 2007 г. Главная страница
Мои программы
Прочее

Примеры с SQL

Список пользовательских баз данных (21.03.2007)

Часто, при разработке приложений возникает необходимость предоставить возможность выбора базы данных. При этом будет красиво, если в списке не будет системных и отключенных (остановленных) баз. Со вторым все очень просто: в статусе проверяем нужный бит на ниличие, и если он установлен, то база остановлена (первое условие в примере). А вот определения именно системности базы я не нашел. Поэтому предлагаются следущие решения (для второго условия):

Я знаю, что в Books-OnLine рекомендуют пользоваться INFORMATION_SCHEMA, а не прямым обращением в системные таблицы, но в данном случае INFORMATION_SCHEMA.SCHEMATA работает скажем так "странно".
Поэтому решение было выбрано такое:

SELECT * FROM sysdatabases WHERE status&100000=0 AND sid<>1 ORDER BY name

Цикл в SQL-запросе.

Цикл один из методов наглядной проверки скорости выполнения SQL-запроса. Лучше, конечно, использовать Profiler или анализировать план выполнения, но часто быстрее и проще "наглядная проверка". Итак, имеем два запроса. Надо определить какой из них предпочтительнее по скорости выполнения. Пишем два цикла в каждом, по одному запросу. Прогоняем каждый два-три раза и определяем среднюю скорость выполнения. Где меньше время, тот и быстрее, хотя не факт, что лучше. Количество выполнений запросов в цикле следует подбирать таким, чтобы время выполнения было около 20 секунд.

DECLARE @i INT
SET @i = 1

WHILE (@i < 500)
BEGIN
// здесь пишется выполняемый в цикле код
SET @i = @i + 1
END

Многопользовательский доступ к таблицам MSSQL.

Часто необходимо обеспечить возможность выбора строк из Таблицы MSSQL при многопользовательской работе. Т.е. первый редактирует в транзакции, а второй в это время читает предыдущий вариант.

 ADOQuery1.Connection.IsolationLevel := ilReadUncommitted;
 ADOQuery1.Connection.Execute('SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');
 ADOQuery1.SQL.Text:='...';
 ADOQuery1.Open;

Даты в SQL-запросах.

 ADOQuery1.Close;
 ADOQuery1.SQL.Text:='SELECT * FROM TAB1 WHERE DATE>='+
                     QuotedStr(FormatDateTime('yyyy-mm-dd 00:00:00', dtpFrom.Date))+
                     ' AND DATE<='+
                     QuotedStr(FormatDateTime('yyyy-mm-dd 23:59:59', dtpTo.Date));
 ADOQuery1.Open;

Часто в SQL-запросах необходимо сделать выборку по дате, и тут многие сталкивались, наверное, с проблемой что по разному настроенные MS SQL сервера "ожидают" дату в немного разном формате. Я в своих программах использую выше приведенный пример, и с проблемами пока не сталкивался.
dtpFrom и dtpTo это компоненты типа TDateTimePicker с датой начала периода и конца периода соответсвенно.

Программирование на Delphi Мои программы В начало

Вы Счетчик посетитель этой странички
с 07 октября 2006 года
Copyright © 2000-2007 svv
О сайте   svv@narod.ru
Hosted by uCoz