Первопричина " недопустимое имя объекта: 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". Для этого существует несколько возможных причин:
- объект не существует, возможно, потому, что схема и / или база данных не существуют
- объект существует, но пользователь, выполняющий процедуру, не имейте разрешение даже увидеть его
- объект существует, но база данных чувствительна к регистру, и некоторая часть имени не соответствует имени в вашем коде
вам нужно будет исследовать больше, чтобы узнать, какова причина в вашем случае, но как полная догадка, ваш производственный сервер имеет базы данных Informix и SomeDB, но ваш тестовый сервер имеет только SomeDB?
наконец, при публикации вопросов всегда включайте версию SQL Server (2000/2005/2008) и издание (Express, Standard, Enterprise); они могут быть очень важны, когда речь идет о схемах и разрешениях, потому что функции и поведение могут быть разными.
Это может быть проблема с владельцем объекта (SP в вашем случае). Проверьте владельца в SQL management studio