Разработка на MS SQL Server |
Подготовлено на основе
материалов НПО "Компьютер",
г. Ижевск,
опубликованных на сайте www.comp.udmnet.ru
Ответ: К сожалению, вернуть эти данные уже не удастся. Если только восстановить базу данных из резервной копии. На будущее можно порекомендовать следующие способы предохранения от такой случайности.
Способ 1. Самый лучший. Внимательно проверять запрос, перед тем как его выполнить!
Способ 2. Преобразуйте delete в select с теми же from и where и проверьте, что он возвращает. Например, требуется выполнить такую команду:
delete from Table1
from Table2 t2
where t2.Fld1=Table1.Fld2
Проверим, что будет удалено таким запросом:
select Table1.*
from Table1, Table2 t2
where t2.Fld1=Table1.Fld2
Способ 3. Это способ требует большой внимательности. Суть способа - использование механизма транзакций для отката возможных некорректных действий. Для этого:
Ответ: Есть. В MS SQL 6.5 - 16 таблиц. Причем в это количество входят таблицы в подзапросах и во VIEW. Пока известен только один способ борьбы с ограничением - создавать рабочие таблицы и выносить часть запроса в них. Причем при использовании большого количества (6 и более) таблиц в MS SQL 6.5 резко замедляется выполнение запроса и резко увеличивается загрузка процессора. Иногда может помочь, если перед выполнением запроса послать команду "set forceplan off". Эта команда заставляет сервер не умничать, а выполнять запрос так как ему сказали, не оптимизируя его. После выполнения запроса необходимо послать команду "set forceplan on".
В MS SQL 7.0 ограничение на количество таблиц значительно слабее (кажется, там можно использовать 256 таблиц). Причем не наблюдается замедления при увеличении количества таблиц.
Ответ: Дело в том, что SQL Server очень трогательно относится к значениям null. Если поле может принимать значение null, то лучше всего в условия использовать функцию isnull(). Например, так - isnull(t.LAcc,0)=isnull(s.CHET,0).
Ответ: MS SQL Server (по крайней мере 6.5) умничает по поводу выделения памяти. Если строке присвоено 4 символа, то он и выделит 4, а не 255 как просили. Решением может служить первоначальное присвоение не константы, а переменной, чтобы он не смог догадаться о ее длине.
Ответ: Прямой рекурсии триггера на одно и то же событие не происходит. Косвенная рекурсия возможна. Т.е. - если в триггере на update сделать update этой же таблицы, то триггер второй раз не вызовется, но если update будет сделан в ХП, которая вызвана в триггере, то вызовется уже другой экземпляр триггера на update. Также триггеры на разные события вызываются друг из друга. Только для всего этого необходимо, чтобы параметр сервера 'nested triggers' имел значение 1. Проверить это можно, вызвав команду "sp_configure 'nested triggers'" и проверив колонку "run_value".
Ответ: По умолчанию дата в SQL-запросе принимается в следующем формате - mdy. Изменить это можно с помощью команд SET DATEFORMAT. Синтаксис: set dateformat mdy|dmy|ymd. Действует на текущий коннект.
Ответ: В MS SQL Server - 6.5 - 250
В MS SQL Server - 7.0 - 1024
Ответ: Microsoft говорит, что при попытке послать в строковое поле типа varchar() значение "", туда пишется один пробел (single space). А тип char() заполнится пробелами.
Ответ: В результате экспериментов было выяснено, что если поле имеет признак NOT NULL, то тип VARCHAR занимает в таблице места столько, сколько значащих байт в строке (последние пробелы отрезаются), а CHAR занимает столько - сколько задано и добивает при необходимости пробелами. Если поле имеет признак NULL, то тип CHAR и VARCHAR ведут себя одинаково. Microsoft также утверждает, что доступ к полю CHAR идет быстрее, но на сколько (или во сколько) неизвестно.
Ответ: Нужно добавить группировку по колонке Column3:
...
group by Column2+Column3, Column3
Ответ: Такие символы нужно заключать в квадратные скобки:
Ответ: Уже замечено, что после truncate и заполнения таблицы SQL Server перестает использовать индексы, наложенные на эту таблицу. После закрытия текущего соединения с сервером и установки нового обычно все приходит в норму. (01/17/01)
За дополнительной информацией обращайтесь в компанию Interface Ltd.
INTERFACE Ltd. |
|