Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
Есть некий скрипт по удалению таблицу. Но в этом случае он ее не может удалить. Смотрю через MS SMS, таблицы этой не нахожу. Но она есть в sysobjects. Как такое возможно? Как в итоге удалить эту таблицу?
30 мар 17, 14:36    [20351053]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Прочитать сообщение об ошибке при удалении таблицы, осознать его, устранить препятствия для удаления и повторить. Как-то так.
30 мар 17, 14:40    [20351076]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Jhonny-2005,
автор
Есть некий скрипт по удалению таблицу. Но в этом случае он ее не может удалить. Смотрю через MS SMS, таблицы этой не нахожу. Но она есть в sysobjects. Как такое возможно? Как в итоге удалить эту таблицу?


ставлю на то что это не таблица, ещё гадалки есть?
30 мар 17, 14:41    [20351086]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
TaPaK
Jhonny-2005,
автор
Есть некий скрипт по удалению таблицу. Но в этом случае он ее не может удалить. Смотрю через MS SMS, таблицы этой не нахожу. Но она есть в sysobjects. Как такое возможно? Как в итоге удалить эту таблицу?

ставлю на то что это не таблица, ещё гадалки есть?


Принимаю! Ставлю на то что это не та схема :)
30 мар 17, 14:46    [20351116]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
Гавриленко Сергей Алексеевич
Прочитать сообщение об ошибке при удалении таблицы, осознать его, устранить препятствия для удаления и повторить. Как-то так.


Удаление идет следующим методом:
ALTER PROCEDURE [dbo].[SBDropUserObjects]
  @UserName sysname = null
AS
BEGIN
  SET NOCOUNT ON
  declare @ErrNum int
  select @ErrNum = 0

  if @UserName is null
    select
      @UserName = dbo.SBGetDatabaseUserName(default)
  if @UserName = 'dbo'
    begin
      -- Проверить ошибки
      select @ErrNum = 5469
      if @ErrNum <> 0
        goto EndOfSP
    end
  declare @ObjID int, @UserID int, @Type varchar(10), @Str varchar(255)
  declare Crs_DelObj  insensitive scroll cursor for
    select
      convert(int,so.id),
      convert(int,so.uid),
      so.type
    from
      sysobjects so,
      sysusers su
    where
      so.uid > 1 and
      so.uid = su.uid and
      su.name <> 'INFORMATION_SCHEMA' and
      su.name = @UserName and
      so.type in ('V', 'U', 'P')

  open Crs_DelObj
  fetch first from Crs_DelObj into @ObjID, @UserID, @Type
  while @@fetch_status<>-1
  begin
    if @@fetch_status<>-2
    begin
      if @Type='V'
        select @Str='drop view [' + @UserName + '].[' + object_name(@ObjID) + ']'
      if @Type='U'
        select @Str='drop table [' + @UserName + '].[' + object_name(@ObjID) + ']'
      if @Type='P'
        select @Str='drop procedure [' + @UserName + '].[' + object_name(@ObjID) + ']'
      exec(@Str)
    end
    fetch next from Crs_DelObj into @ObjID, @UserID, @Type
  end

  close Crs_DelObj
  deallocate Crs_DelObj

EndOfSP:
  SET NOCOUNT OFF
 -- Если была ошибка
  if @ErrNum<>0
  begin
    if @@TRANCOUNT<>0
      rollback
    execute XRaisError @ErrCode=@ErrNum
  end
END



Выходит на том, что находит объект в sysobject с именем tmpSpis. Но в итоге грохнуть его не может.
30 мар 17, 14:46    [20351118]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Шыфл,

автор
Принимаю! Ставлю на то что это не та схема :)

та не.. схему это ещё и писать надо было в DELETE... очень вряд ли :)
30 мар 17, 14:47    [20351124]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Шыфл,

чёрт... я проиграл.. схема :)
30 мар 17, 14:48    [20351129]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Jhonny-2005
Выходит на том, что находит объект в sysobject с именем tmpSpis. Но в итоге грохнуть его не может.
Для тех, кто в танке читать, пока не дойдет: 20351076
30 мар 17, 14:51    [20351144]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
Гавриленко Сергей Алексеевич
Jhonny-2005
Выходит на том, что находит объект в sysobject с именем tmpSpis. Но в итоге грохнуть его не может.
Для тех, кто в танке читать, пока не дойдет: 20351076


Я видимо танкист.
Cannot drop the table 'dmonakov.tmpSpis', because it does not exist or you do not have permission.

Права sysadmins.
30 мар 17, 14:53    [20351155]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Jhonny-2005
Гавриленко Сергей Алексеевич
пропущено...
Для тех, кто в танке читать, пока не дойдет: 20351076


Я видимо танкист.
Cannot drop the table 'dmonakov.tmpSpis', because it does not exist or you do not have permission.

Права sysadmins.
И как вы проверяете, что таблица с таким именем существует?
30 мар 17, 14:57    [20351168]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Jhonny-2005,

а что вернёт
select OBJECT_ID('[dmonakov].[tmpSpis]')

?
30 мар 17, 14:58    [20351175]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
Шыфл
Jhonny-2005,

а что вернёт
select OBJECT_ID('[dmonakov].[tmpSpis]')

?


Возвращает NULL
30 мар 17, 14:59    [20351178]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Jhonny-2005
Возвращает NULL
Значит объекта с таким именем нет.
30 мар 17, 15:00    [20351185]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32167
Jhonny-2005
Выходит на том, что находит объект в sysobject с именем tmpSpis
Вы бы отладочный вывод поставили, что ли, перед exec
30 мар 17, 15:02    [20351200]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
Гавриленко Сергей Алексеевич
Jhonny-2005
Возвращает NULL
Значит объекта с таким именем нет.

Тогда почему мне запрос вида:
select
      so.id,
      so.uid,
      so.type
    from
      sysobjects so,
      sysusers su
    where
      so.uid > 1 and
      so.uid = su.uid and
      su.name <> 'INFORMATION_SCHEMA' and
      su.name = 'dmonakov' and
      so.type in ('V', 'U', 'P')


Возвращает ID, с uid этого пользователя и type U ?
30 мар 17, 15:03    [20351201]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Гавриленко Сергей Алексеевич
Jhonny-2005
Возвращает NULL
Значит объекта с таким именем нет.


Про это, собственно, TC и спрашивает...
Очевидно, что курсор с неявным join
from
      sysobjects so,
      sysusers su
where 
so.uid = su.uid

возвращает несуществующую таблицу
30 мар 17, 15:05    [20351213]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Шыфл
Гавриленко Сергей Алексеевич
пропущено...
Значит объекта с таким именем нет.


Про это, собственно, TC и спрашивает...
Очевидно, что курсор с неявным join
from
      sysobjects so,
      sysusers su
where 
so.uid = su.uid


возвращает несуществующую таблицу
Потому что для запросов метаданных и для тех, кому лень разбираться, что возвращают старые представления, придумали удобные представления information_schema.*, в частности information_schema.tables

Сообщение было отредактировано: 30 мар 17, 15:09
30 мар 17, 15:09    [20351228]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Jhonny-2005,

говорю ж схема
не sys.users, а sys.schemas надо
30 мар 17, 15:09    [20351230]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
TaPaK
Jhonny-2005,

говорю ж схема
не sys.users, а sys.schemas надо


Т.е. вы предлагаете проверку выполнять таким способом?
select
      so.id,
      so.uid,
      so.type
    from
      sysobjects so,
      sys.schemas su
    where
      so.uid > 1 and
      so.uid = su.schema_id and
      su.name <> 'INFORMATION_SCHEMA' and
      su.name = 'dmonakov' and
      so.type in ('V', 'U', 'P')
30 мар 17, 15:16    [20351271]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Jhonny-2005,

    select
      sys.objects.name, sys.schemas.name 
    from
      sys.objects so,
      sys.schemas  su
    where
      so.schema_id = su.schema_Id a
30 мар 17, 15:19    [20351288]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
gdkled
Guest
Добавить N'' - sysname всё ж таки.

И проверять наличие объекта.

Визуально не различимы :

OBJECT_ID(N'[dmonаkov].[tmpSpis]')
OBJECT_ID(N'[dmonakov].[tmpSpis]')

А разница есть.
30 мар 17, 15:24    [20351334]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
Jhonny-2005
Member

Откуда: Москва
Сообщений: 76
TaPaK,

Это конечно хорошо, таким способом не находится. Но вопрос то больше почему в моем случае находит соответствующую таблицу в sysobjects по данному uid юзера.
30 мар 17, 16:02    [20351572]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Jhonny-2005,

ну так хелп почитайте
30 мар 17, 16:05    [20351593]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
iap
Member

Откуда: Москва
Сообщений: 47194
Jhonny-2005
TaPaK,

Это конечно хорошо, таким способом не находится. Но вопрос то больше почему в моем случае находит соответствующую таблицу в sysobjects по данному uid юзера.
В документации же ясно сказано: надо пользоваться sys.objects, а не sys.sysobjects!
И uid - это id схемы, а не пользователя!
https://msdn.microsoft.com/ru-RU/library/ms177596.aspx
30 мар 17, 16:14    [20351641]     Ответить | Цитировать Сообщить модератору
 Re: Не удаляется таблица  [new]
gdkled
Guest
Связи смотреть проще по sql server system views poster
30 мар 17, 16:39    [20351789]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить