Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
sp.Prepared or not sp.Prepared(7->2000)
|
|||
|---|---|---|---|
|
#18+
Приветствую тебя, All! Может я чего не понимаю, но.... Ситуация: На MS SQLе есть две процедуры A и В. Процедура А вызывает процедуру B. Есть DBUser, у которого есть права на EXEC для A, но нет для В. Проверяем на MSSQL 7.0: QueryAnalyzer: Exec A => Ok Delphi Application (variant 1): sp := TADOStoredProcedure.Create(nil); ......... sp.ProcedureName := 'A'; ....................... sp.Open .............. =>Ok Delphi Application (variant 2): sp := TADOStoredProcedure.Create(nil); ......... sp.ProcedureName := 'A'; sp.Prepared := True; //!!!!important ....................... sp.Open .............. =>Ok Проверяем на MSSQL 2000: QueryAnalyzer: Exec A = > Ok Delphi Application (variant 1): sp := TADOStoredProcedure.Create(nil); ......... sp.ProcedureName := 'A'; ....................... sp.Open .............. =>Ok Delphi Application variant 2: sp := TADOStoredProcedure.Create(nil); ......... sp.ProcedureName := 'A'; sp.Prepared := True; //!!!!important ....................... sp.Open .............. =>Error: Error=EXECUTE permission denied on object 'B', database 'test22', owner 'dbo' Вот такая петрушка понимаешь.... Вообще говоря, я не совсем понимаю назначение этого Prepared свойства в данном контексте, судя по кешу на сервере ему(серверу) абсолютно пофиг. Может кто обяснит что происходит и где я неправ? Ж-/ Использую Delphi 5, Ado->OleDB, MDAC ver 2.6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2001, 09:56 |
|
||
|
sp.Prepared or not sp.Prepared(7->2000)
|
|||
|---|---|---|---|
|
#18+
Вот кусочек статьи из MSDN (topic "ADO Command Strategies") The (so-called) Prepared property In theory, the Prepared property was designed to reduce work on the server by pre-compiling ad hoc queries so subsequent executions would use a temporary stored procedure instead of repeating the compile phase each time the query is executed. However, this is not the case with ADO's implementation—keep reading. Since ODBC was invented some years ago, SQL Server has gotten much smarter—it now knows how to leverage existing (in cache) compiled query plans. That is, once you execute a query from ADO (or by any means), SQL Server constructs a query plan, saves it in the procedure cache, and executes it. When the query is done, SQL Server marks the query plan as "discardable" but leaves it in memory as long as it can. When another identical (or close-enough) query comes in, which is very likely in systems running multiple clients, SQL Server simply re-uses the cached plan. This saves a significant amount of time and greatly improves scalability. It makes SQL Server actually run faster as more users are added, assuming they're doing about the same things with the same set of queries. ADO and its ODBC and OLE DB data providers know about this strategy, and in most cases they execute sp_executesql to take advantage of this feature. However, this puts the Prepared property in a quandary. It insists on creating temporary stored procedures, but the data providers insist on using sp_executesql. The result? Chaos. I describe what happens a little later when executing Command objects is discussed. My recommendation for the Prepared property: forget it—at least for SQL Server. For other providers, set up a trace that shows exactly what's going on—what the server is being asked to do. --------------------------------------- Возникающей ошибки это, может быть, не объясняет, но, похоже, что использовать Prepared свойство для ADO не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2001, 10:24 |
|
||
|
sp.Prepared or not sp.Prepared(7->2000)
|
|||
|---|---|---|---|
|
#18+
Весьма признателен за наводку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2001, 12:04 |
|
||
|
sp.Prepared or not sp.Prepared(7->2000)
|
|||
|---|---|---|---|
|
#18+
Prepared устанавливается в True для запросов с параметрами. Этим достигается некоторое подобие параметризированных запросов благодаря тому, что SQL-сервер не выполняет повторный разбор и компиляцию запроса при выполнении этого же запроса с другими значениями параметров. К примеру, для данной ситуации вполне подходит запрос "select * from TBL where SomeField=?". Вместо знака вопроса передается значение параметра. SQL-сервер строит план выполнения подобных запросов с учетом, что значение параметра может изменяться. И не выполняет повторную компиляцию запроса при получении такого же запроса с другим значением параметра (при условии, что последующий запрос был сделан без не слишком длинной паузы после предшествцующей отправки SQL-серверу этого же запроса с другим значением параметра, и план выполнения запроса еще остался в кэше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2001, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3559&tid=1826080]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 226ms |
| total: | 379ms |

| 0 / 0 |
