|
Чудеса да и только!!!!
|
|||
---|---|---|---|
#18+
Все описанное ниже относится к MS SQL 7. Как в 2000 - не знаю. В MS SQL вообще много странного непонятного. В том числе есть возможность процедурам прикидываться таблицами. В базе master есть группа таблиц, имена которых начинаются с SYSREMOTE_. Так вот, эти таблицы не настоящие, а попытка сделать select из них, например так: select * from SYSREMOTE_CATALOGS приводит к следующей ошибке: Procedure 'SYSREMOTE_CATALOGS' expects parameter 'ServerName', which was not supplied. И как Вам такое? Мало того есть специальная форма оператора select!!! Вот и примерчик: create procedure sp_catalogs( @server_name sysname) as select CATALOG_NAME, convert (nvarchar(255),DESCRIPTION) from master.dbo.SYSREMOTE_CATALOGS < @server_name > order by CATALOG_NAME Обнаружено все это было чисто случайно. Документация "молчит как рыба об лед". Или я не нашел описания этих чудес... Кто нибудь может это объяснить, ШО ЭТО ТАКОЕ?!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2001, 19:54 |
|
Чудеса да и только!!!!
|
|||
---|---|---|---|
#18+
Многие знания влекут многие печали. Предположим, MSDE где-то внутри себя поддерживает некую разновидность persisted parameterized queries. Причем предположим также, что делалось это еще в те времена, когда в SQL Server'e не было понятия in-line table-valued function, поэтому снаружи это засвечено как sp, а не как, допустим, параметризованное представление. Я подчеркиваю, что все это догадки и проку от них чуть, п.ч. даже доскональное знание того, как на с.д. это устроено, не поможет сделать что-н. вроде select * from sp_who до выхода сл.версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2001, 19:43 |
|
Чудеса да и только!!!!
|
|||
---|---|---|---|
#18+
В принципе, как SP эта скрытая не видна. Видна только таблица. Но вот при попытке сделать select нарываешься на процедуру. Скорее всего это реализовано как-нибудь по типу расширенных хранимых процедур. Да, еще в sysobjects в поле sysstat для всех этих псевдотаблиц стоит одно и то же значение = 1089. Ну, да хрен бы с ним. Могли бы все это дело хоть в документации прописать, что мол, так и так, есть системные таблицы, запросы к ним делать вот так. А еще лучше - как самому такое же сотворить. Ведь видно же, что можно. Однако ж - фигушки, как всегда у MS получается, что все звери равны, но некоторые равнее других. К стати, в 6.x этого, вроде как, не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2001, 22:01 |
|
Чудеса да и только!!!!
|
|||
---|---|---|---|
#18+
Потому что в 6.х не было прилинкованных серверов. А по поводу документации - MS всегда говорила: не привязывайтесь к системным объектам, т.к. даже чтение в случае изменения их стр-ры в след.версии (или даже в SP) сделает программу неработоспособной. Напр., чтобы посмотреть список всех БД на прилинкованном сервере лучше исп-ть уже процитированную sp_catalogs, нежели select * from sysremote_catalogs. Я, конечно, понимаю, что любому здравомыслящему человеку еще с детства хочется понять, как все устроено, поэтому желание разобрать игрушку, сделав sp_helptext, вполне оправдано. Но тогда не стоит упрекать MS в недокументированности того, чем пользоваться, в принципе, не предполагается. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2001, 07:55 |
|
Чудеса да и только!!!!
|
|||
---|---|---|---|
#18+
Весьма любопытен синтаксис запроса, p.e. в sp_calalogs:from master.dbo.SYSREMOTE_CATALOGS < @server_name > Между тем, в скрипте oledbsch.sql ('CREATE OLE-DB SYSTEM VIEWS') я никаких странностей не увидел. ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2001, 09:09 |
|
|
start [/forum/topic.php?fid=46&msg=32002923&tid=1827219]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 393ms |
0 / 0 |