Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
господа сейчас нашел какое то странное поведение sp_help

у когонибудь она работает по sp_hexadecimal?

+ репро


use master;
go
if object_id('[dbo].[sp_hexadecimal]', N'P') is not null drop procedure [dbo].[sp_hexadecimal];
go
CREATE OR ALTER PROCEDURE [dbo].[sp_hexadecimal]
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
go

sp_help N'sp_hexadecimal'




и я чето не понимаю по sp_help_revlogin ну или любой другой пользовательской процедурку в мастере оно работает. а тут возникает
сообщение: 15009, уровень: 16, состояние: 1, процедура: sp_help, строка: 79 [строка начала пакета: 1]
The object 'sp_hexadecimal' does not exist in database 'master' or is invalid for this operation.


под sysadmin!
28 июн 18, 12:59    [21528166]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
felix_ff,

автор
CREATE OR ALTER


Вы большой фантазёр.
28 июн 18, 13:05    [21528186]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Владислав Колосов,

Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)
Mar 18 2018 09:11:49
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)
28 июн 18, 13:06    [21528190]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
msLex
Member

Откуда:
Сообщений: 7736
Владислав Колосов
Вы большой фантазёр.

вы просто отстали от жизни
28 июн 18, 13:11    [21528208]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
msLex,

Вах! Сижу в своем болоте SQL2012...
28 июн 18, 13:18    [21528241]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Владислав Колосов,

так не суть важно как создать процедурку.

на версиях ниже sp_help тоже вываливается в ошибку по sp_hexadecimal? у меня сейчас просто под рукой только 16 интансы
28 июн 18, 13:31    [21528301]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
sp_help вашу процедуру не знает, т.к. она не системная
28 июн 18, 13:36    [21528330]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff,

Дело не в sp_help, а в sp_hexadecimal - мне даже не удается её переименовать, выдается ошибка
Either the parameter @objname is ambiguous or the claimed @objtype (OBJECT) is wrong. (Microsoft SQL Server, Error: 15248)
28 июн 18, 13:37    [21528337]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Eleanor,

такое впечатление что где то жестких хардкод в функции object_id
потому что в sp_help используется инструкция
select @objid = object_id, @sysobj_type = type from sys.all_objects where object_id = object_id(@objname)

но я никак понять не могу, потому что просто если выполнять отдельную инструкцию строка возвращается, а по профайлеру смотреть в процедурке он строку не возвращает.
28 июн 18, 13:45    [21528370]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff
такое впечатление что где то жестких хардкод

Хардкод по имени sp_hexadecimal?
Если создать такую же процедуру hexadecimal_2, то с ней всё работает - sp_help, переименование.
А sp_hexadecimal - особенная в любой БД.
28 июн 18, 13:52    [21528397]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff,

Кстати, если посмотреть в системную базу Resource, то там есть процедура sp_hexadecimal.
Возможно, поэтому и возникает ошибка "the parameter @objname is ambiguous"
28 июн 18, 14:03    [21528430]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
Что тут скажешь, MS не зря предупреждали не создавать пользовательские процедуры с названием sp_.
28 июн 18, 14:44    [21528652]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff,

Из той же серии конфликта с системными ХП:

Если создать процедуру dbo.sp_db_ebcdic277_2, то при выполнении EXEC или sp_help будет находиться не она, а системная sys.sp_db_ebcdic277_2.
Sp_rename находит обе процедуры и не понимает, какую из них выбрать.
И это несмотря на то, что вы явно указываете схему dbo в имени процедуры.

Если создавать ХП в другой схеме, не в dbo, то конфликта с системными ХП нет.
28 июн 18, 16:28    [21528964]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Eleanor
felix_ff,

Кстати, если посмотреть в системную базу Resource, то там есть процедура sp_hexadecimal.
Возможно, поэтому и возникает ошибка "the parameter @objname is ambiguous"


странно подцепил mssqlsystemresource и не нашел там этой процедурки
28 июн 18, 16:36    [21528981]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff,

select * from sys.procedures where name = 'sp_hexadecimal' - нечего нет?
В SSMS она в секции Stored Procedures -> System Stored Procedures
28 июн 18, 16:40    [21528989]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Eleanor,

имя базы изменено, иначе он не дает подцепить.

К сообщению приложен файл. Размер - 95Kb
28 июн 18, 16:47    [21529010]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
Eleanor
Member

Откуда:
Сообщений: 2643
felix_ff,

У меня все эти запросы находят нужную ХП, не находит только object_id('sp_hexadecimal').
Возможно, дело в версии… У меня Resource взят из Microsoft SQL Server 2008 R2. Кто их знает, удалили, например, эту процедуру в новых версия, а где-то в метаданных упоминание sp_hexadecimal осталось.
28 июн 18, 16:57    [21529042]     Ответить | Цитировать Сообщить модератору
 Re: metadata visibility  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1173
Eleanor,

Мой косяк походу, аттачил на инстанс sqllocaldb там видимо что то с ограничениями редакции.
сейчас примапил resource на полноценный инстанс там действительно есть процедурка в схеме.

вообщем приблизительно тогда картина вырисовывается.
29 июн 18, 09:50    [21530454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить