|
То ли фенечка, то ли грабельки...
|
|||
---|---|---|---|
#18+
На сервере лежит View Select * From Mytable Where [date]>'01/02/01'. При моих настройках сервера он читается как - вывести записи начиная со 2 января и работает без проблем. Делаю в Дельфи ADOTable, connectionstring... и смотрю в грид. Вижу там записи начиная с 1 февраля. Откуда уши растут понятно - из Дельфи я конекчусь юзером имеющим на сервере russian language в логине, а на самом сервере работаю админом с english настройкой. Но ведь вьюха уже сохранённая, давно откомпилированная..., что-же сервер его разбирает, смотрит на логин и заново компилирует? Но это противоречит самому определению сереверных представлений. А если такие грабли начнут всплывать в давно написанных БД при первом нестандартном коннекте? Так можно и по шее получить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 12:10 |
|
То ли фенечка, то ли грабельки...
|
|||
---|---|---|---|
#18+
Помоему дело в региональных настройках ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 16:50 |
|
То ли фенечка, то ли грабельки...
|
|||
---|---|---|---|
#18+
Да, будет заново компилировать. Что Вас так удивляет? План запроса никогда не будет шариться при различии параметров настройки сред окружения пользовательских сессий, могущих повлиять на ход выполнения запроса. Возьмите какой-нибудь select * from authors и выполните его с 2-х сессий. (Только сначала сделайте DBCC FREEPROCCACHE). В одной перед запросом поставьте set ansi_warnings on, в другой off. А теперь посмотрите select sql, db_name(dbid) from master..syscacheobjects where cacheobjtype = 'Executable Plan' and objtype = 'Prepared', сколько планов получилось. Про это, по-моему, даже в документации сказано. А если не сказано, то все равно здравый смысл должен подсказать. Жизнь наша с вами так устроена, что чудес не бывает. Либо компилировать план вместе с частью среды окружения (ситуация, типичная для хранимых процедур и обычных представлений), либо в предположении, что все они заведомо фиксированы, сиречь, кругом царит сплошной детерминизьм (ситуация хранимых функций и "материалистических" представлений). Кстати, по поводу первой ситуации меня достаточно давно, еще во времена 7.0, один пионэр с ВМК спрашивал, что, мол, как же так, ведь у вас декларирована реентерабельность планов? Но никто и не утверждал, что в памяти хранятся два одинаковых куска кода с разными стеками. Просто здесь такая ситуация, что содержимое стека в действительности влияет на сам код. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2001, 18:28 |
|
То ли фенечка, то ли грабельки...
|
|||
---|---|---|---|
#18+
Эта ситуация с вьюхами (о которой я писал выше) верна и для SP. Уважаемый Дед Мастдай, я во всём (или почти во всём) согласен с Вашими теоретическими выкладками, но всё же не могу не сделать два замечания: 1. Странно когда один человек запускает ЕМ, открывает там view (без каких либо параметров) и получает некие данные. Затем за эту машину садится другой юзер, открывает тот же самый view (без единого лишнего действия) - и получает совершенно другие данные. Не думаю, что это нормально. 2. Можно открыть любой учебник по mssql и прочитать там радостную агитацию авторов за создание хранимых процедур, поскольку они "уже на сервере", "уже откомпилированы", "уже самый супер"... врут значит проходимцы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 17:13 |
|
То ли фенечка, то ли грабельки...
|
|||
---|---|---|---|
#18+
Уважаемый Василий. Дела обстоят именно так, а нормально это или нет - к сожалению, личностные оценки, во многом продиктованные привычкой. Я думаю, что нормально, когда end users не запускают EM, а работают с сервером через Вами написанный интерфейс, где учтены подобные нюансы. Несмотря на свою продвинутость, SQL Server - всего лишь программа, которая на данной стадии не способна бегать за Вас за пивом в силу присущих ей объективных ограничений, суть которых, как мне казалось, я объяснил. По поводу учебников - по-моему, Вы чего-то недопоняли. Когда от клиента поступает запрос, то SQL Server, естественно, прежде, чем бросаться его выполнять, поищет его план в процедурном кэше на предмет не посылал ли клиент его уже незадолго перед этим. Так что с этой точки зрения я, честно говоря, вижу мало разницы между размещением бизнес-логики на сервере и на клиенте. Серверный вариант предпочтителен с точки зрения централизации и управляемости. Напр., с выходом SQL Srv 2000 многие стали держать маски ввода полей и прочие правила форматирования в extended properties. Чтобы клиентская прилада их оттуда считывала и сама ничего не придумывала. К сожалению, иногда это невозможно. На форуме уже обсуждался вопрос, как отлавливать на клиенте изменения в записи. Сейчас это невозможно, поэтому приходится изобретать компоненту промежуточного слоя и все updates гнать через нее. Но как только в след.версии SQL Server научится генерить пользовательские events, чест.слово, я снесу эту dll и вставлю все в триггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2001, 23:02 |
|
|
start [/forum/topic.php?fid=46&tid=1827097]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 123ms |
0 / 0 |