Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
28.01.2002, 14:51
|
|||
|---|---|---|---|
А знаете ли вы ? |
|||
|
#18+
1.В очередной раз наткнувшись на недокументированные функции NT_CLIENT() - аналогична SYSTEM_USER и PROGRAM_NAME() - аналогична APP_NAME(), была предпринята попытка найти их все, и раз и навсегда покончить с "дискриминацией". Было обнаружено более 30 интригующих наименования, которые были протестированы с целью возможного их использования. К сожалению, более 20 из них SQL2K отказался признавать за свои, большая часть из оставшихся осталась непонятой. И, наконец, несколько штук показались интересными. Здесь описаны всего 2, которые могут представлять некоторый интерес для разработчиков. а). Функция GetDefault({dbname|dbid}, defaultid) возвращает вычисленное значение DEFAULT по его идентификатору в соответствующей БД. Самый большой недостаток этой функции в том, что в качестве параметров она воспринимает только литералы(бишь, символьные константы), что резко снижает ее полезность на практике. По инерции была написана процедура, которую можно использовать, если потребность в значении DEFAULT является настоятельной. /* Возвращает значение DEFAULT */ CREATE PROCEDURE dbo.DefaultValue @DefaultName sysname, @RetVal sql_variant OUTPUT AS DECLARE @DefID int, @SQL nvarchar(400) SET @DefID = OBJECT_ID(@DefaultName) IF @DefID IS NULL BEGIN RAISERROR (15016, 16, 1, @DefaultName) RETURN END SET @SQL = N'SET @Val = GetDefault(' + QUOTENAME(ISNULL(PARSENAME(@DefaultName, 3), DB_NAME()), '''') + N', ' + CAST(@DefID AS nvarchar(11)) + N')' EXEC master.dbo.sp_executesql @SQL, N'@Val sql_variant OUTPUT', @RetVal OUTPUT GO Входным параметром является наименование DEFAULT, в том числе с указанием БД, в котором оно "живет". Выходным - собственно, значение. Так как значение может иметь любой тип, то данный параметр имеет тип sql_variant. Пример использования: DECLARE @RetVal sql_variant EXEC dbo.DefaultValue 'msdb..default_current_date', @RetVal OUT SELECT @RetVal б). Функция UnCompress, каковая несмотря на свое громкое название умеет только переводить varbinary(n) в nvarchar(n). Так как то же самое с помощью CAST сделать несколько сложнее, то полезность этой функции хоть и невелика, но наличествует. Кстати, позже было обнаружено, что она используется где-то в дебрях для чтения из поля ctext таблицы syscomments. Пример использования: DECLARE @str varbinary(6) SET @str = CAST(N'PdQRy' AS varbinary(6)) SELECT UnCompress(@str) -- varbinary(1-byte chars) to nvarchar 2.Любой свой объект можно сделать системным, что, по крайней мере, защищает их от простого удаления либо изменения. Этот процесс выполняется с помощью системной процедуры sp_MS_marksystemobject. Для обратного процесса процедура не обнаружена. Вероятно по причине, что если Вы набрались наглости "засистематизировать" свой объект, то квалификация достаточна и для обратной процедуры. Суть метода заключается в последних строчках вышеуказанной процедуры, которые можно вырезать и вместо "| 0xC0000000" подставить "& 0x3FFFFFFF", после чего "системный" объект вновь превращается в обычный. Только не забудьте, что для выполнения обратной операции необходимо разрешить прямое обновление системных таблиц с помощью sp_configure. 3. Так же как процедуры с именем, начинающимся с sp_ сначала ищутся в master базе данных, так же и функции, начинающиеся на fn_, демонстрируют такое же поведение. Единственный нюанс заключается в том, что владельцем такой функции должен быть system_function_schema, что элементарно делается под sa, а скорее под владельцем БД master. Кстати, для такой операции тоже необходима возможность прямого обновления системных таблиц. ------------------ Благодарю за внимание P.S. Прямое обновление системных таблиц после выполнения специфических операций лучше сразу запретить. P.P.S. После знакомства с MSMQ очень захотелось использовать следующие процедуры: xp_controlqueueservice xp_createprivatequeue xp_createqueue xp_decodequeuecmd xp_deleteprivatequeue xp_deletequeue xp_displayqueuemesgs xp_peekqueue xp_readpkfromqueue xp_resetqueue Если кто-нибудь знаком с этими процедурами не понаслышке, был благодарен получить о них как можно более полную информацию по cha@vkkb.ru, или хотя бы ссылку на такую информацию. Куцая информация из системных процедур не интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1824161]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 357ms |

| 0 / 0 |
