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

Откуда:
Сообщений: 24290
Привет всем... наткнулся на интересную историю.... если кто значет просто тыкните носом в доку.
Есть sp_addextendedproperty , берем там простую хранимку
create procedure position.test  (@a int) 
as select @a
Делаем
       EXECUTE sp_addextendedproperty
                    @name=N'TestProperty'
                  , @value =N'test'
                  , @level0type = N'SCHEMA'
                  ,@level0name =N'position'
                 , @level1type = N'PROCEDURE'
                 , @level1name = N'test'
И на выходе имеем честную картинку через fn_listextendedproperty все видно все ок , Но захотелось написать чет общее для всех..и тут неудача
все попытки вызова типа
+
1
                  execute sp_addextendedproperty
                    @name=N'TestProperty'
                   ,@value = N'test'
                  , @level0type = N'SCHEMA'
                  ,@level0name =@schema
                 , @level1type = N'PROCEDURE'
                 , @level1name = @name  
№2
declare 
    @sqlStr nvarchar(200)
   ,@paramSql nvarchar(200)
  ,@shema nvarchar(100)
  ,@name nvarchar(100)
   set @shema = N'position'
   set @name = N'test'
   set @sqlStr  = N'EXECUTE sp_addextendedproperty @name = @name, @value =@value,@level0type  =@level0type,@level0name  =@level0name,@level1type  =@level1type,@level1name = @level1name'
   set @paramSql = N' @name sysname,@value sysname,@level0type sysname,@level0name sysname,@level1type  sysname,@level1name sysname'
exec sp_executesql  @statement=  @sqlStr, @params=  @ParamSQL
    ,@name = N'TestProperty',@value  = N'Test',@level0type =N'SCHEMA',@level0name = @shema,@level1type  =N'PROCEDURE',@level1name =@name
№3
declare
   @shema nvarchar(100)
   ,@name nvarchar(100)
   set @shema = N'position'
   set @name = 'test'
   exec('EXECUTE sp_addextendedproperty @name=N''TestProperty''
  , @value = N''MyTest''
  , @level0type = N''SCHEMA''
  ,@level0name ='+@shema+'
 , @level1type = N''PROCEDURE''
 , @level1name ='+ @name )

Приводят к одной и тойже ошибке
Msg 15135, Level 16, State 8, Procedure sp_addextendedproperty, Line 37
Object is invalid. Extended properties are not permitted on 'position.test', or the object does not exist.

Попытки залезть внутрености ,увы не к чему не привели ..там тупо

  EXEC %%ExtendedPropertySet().AddValue(Name = @name, Value = @value, Level0type = @level0type, Level0name = @level0name, Level1type = @level1type, Level1name = @level1name, Level2type = @level2type, Level2name = @level2name)  

Кто знает ответ - почему так работает,просьба поделитесь знаниями или ссылкой

-------------------------------------
Jedem Das Seine
29 ноя 11, 19:00    [11679651]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
все должно работать.
не там запускаете, скорее всего.
29 ноя 11, 19:34    [11679775]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
Maxx
Member [скрыт]

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

ну в чудеса я не очнеь верю .... тем более что реально ето все писалось не меняя окна студии , так что и сервер тот и БД и права теже... ничего разного в выполнении етих 4 х наборов команд нет.
29 ноя 11, 19:37    [11679792]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
вот и я в чудеса не верю. вот этот скрипт у меня выполняется без ошибок:
create schema position
go
create procedure position.test  (@a int) 
as select @a
go
declare @schema sysname, @name sysname
set @schema = N'position'
set @name = N'test'
execute sp_addextendedproperty
                    @name=N'TestProperty'
                   ,@value = N'test'
                  , @level0type = N'SCHEMA'
                  ,@level0name =@schema
                 , @level1type = N'PROCEDURE'
                 , @level1name = @name  
go
select * from fn_listextendedproperty (NULL, 'SCHEMA', 'position', 'PROCEDURE', default, NULL, NULL);
go
drop proc position.test
go
drop schema position
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) Apr 22 2011 11:57:00 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
29 ноя 11, 19:40    [11679805]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
daw
все должно работать.
не там запускаете, скорее всего.


хотя до екпериментов - я именно так и думал
29 ноя 11, 19:40    [11679806]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
daw - честно,чудеса млин Пол дня играюсь.....перед тем как озвучить сие..НО... ваш код работает.. сейчас буду проверять почему мой не работает.....
Спасибо,всегда видимо полезно с умным человеком поговорить....
Хотя откровенно странно
29 ноя 11, 19:47    [11679847]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
mike909
Member

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

А может нужно еще учитывать тот факт что проперть уже существует ?
Тогда Вам в руки еще
exists( select 1 from sys.extended_properties where ...)
sp_updateextendedproperty
sp_dropextendedproperty
...
29 ноя 11, 20:02    [11679921]     Ответить | Цитировать Сообщить модератору
 Re: sp_addextendedproperty  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Спасибо всем, у меня и проверка была и все такое, НО .. спасибо за то что таки тыкнули носом ,а именно с утра на свежу голову нашел..что тупо грохнул процедуру с которой тестировал
30 ноя 11, 10:54    [11681714]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить