Первопричина " недопустимое имя объекта: dbo.и т. д." ошибку?

Я занимаюсь программированием обслуживания довольно большого проекта, который был начат кем-то, кто теперь покинул компанию...

Я только что создал резервную копию одной из баз данных компании, а затем снова подключил ее к нашему тестовому серверу. Кажется, это работает нормально.

затем я прохожу обычную процедуру входа в систему программы, и эта часть также работает.

однако, как только я доберусь до точки в программе, где он должен выполнить хранимую процедура, я получаю сообщение об ошибке Invalid object name 'Informix.dbo.customer'.

запуск той же функции в исходной базе данных отлично работает и возвращает данные, которые я ожидаю увидеть.

объяснения подобных ошибок, которые я нашел, похоже, относятся к схемам, но именно там все становится немного странным. Исходная база данных явно не есть любые схемы; в своей папке" безопасность "он просто имеет папку" Пользователи", содержащую dbo, и папку "роли", содержащую " роли базы данных" папка, с обычным db_owner и т. д. материал и пустая папка с именем "роли приложений".

папка безопасности в резервной копии и восстановленной базе данных полна всякого дерьма. Три пользователя в дополнение к dbo, папка "схемы", папка "сертификаты", две папки ключей шифрования... Я не могу их удалить.

из моего ограниченного понимания системы входа в систему SQL пользователь, в который я вхожу, получает не-dbo-разрешения из этой коллекции случайного дерьма, и поэтому ему отказывают в доступе к частям базы данных, принадлежащей dbo.

для моего собственного понимания, в чем суть проблемы, что рвет эти Invalid object name ошибки? И для практических вопросов, что я могу сделать, чтобы исправить эту ситуацию и на самом деле программа, которую я использую, работает над тестовой базой данных так же, как и над живой?

2 ответов


Если я правильно понимаю, вы выполняете процедуру (SomeProc) в базе данных (SomeDB), и это дает ошибку Invalid object name 'Informix.dbo.customer'? Это просто означает, что SomeProc не может найти объект "клиент" в схеме под названием "ДБО" в базу данных "СУБД Informix". Для этого существует несколько возможных причин:

  1. объект не существует, возможно, потому, что схема и / или база данных не существуют
  2. объект существует, но пользователь, выполняющий процедуру, не имейте разрешение даже увидеть его
  3. объект существует, но база данных чувствительна к регистру, и некоторая часть имени не соответствует имени в вашем коде

вам нужно будет исследовать больше, чтобы узнать, какова причина в вашем случае, но как полная догадка, ваш производственный сервер имеет базы данных Informix и SomeDB, но ваш тестовый сервер имеет только SomeDB?

наконец, при публикации вопросов всегда включайте версию SQL Server (2000/2005/2008) и издание (Express, Standard, Enterprise); они могут быть очень важны, когда речь идет о схемах и разрешениях, потому что функции и поведение могут быть разными.


Это может быть проблема с владельцем объекта (SP в вашем случае). Проверьте владельца в SQL management studio