Вы должны сначала проверить строку соединения:
- обеспечить его подключение к экземпляру SQL Server, вы думаете, что это.
- Убедитесь, что он устанавливает контекст базы данных для подключения в базе данных, которую вы считаете.
- Убедитесь, что он соединяется с полномочиями, которые, по вашему мнению, являются.
- Убедитесь, что эти учетные данные соответствуют пользователю SQL Server.
- То, что пользователь SQL Server имеет схему по умолчанию, которую, по вашему мнению, имеет и имеет соответствующие права, предоставленные в базе данных.
Почти наверняка, ваша проблема связана с одной или несколькими проблемами, перечисленными выше.
Если контекст вашей базы данных для подключения находится в другой базе данных, чем вы думаете, скорее всего, вы не найдете объектов, которые вы ищете.
Если ваши ссылки на объекты не соответствуют критериям схемы, может возникнуть проблема с разрешением ссылок на объекты. Ссылки на объекты в ваших SQL-запросах должны всегда, по крайней мере, быть квалифицированными по схеме. Вместо того чтобы сказать
select * from tblEmployees
вы должны сказать
select * from dbo.tblEmployees
где dbo
это схема, которой принадлежит объект.Любые ссылки на объекты, которые не соответствуют критериям схемы, проверяются во время выполнения в следующем порядке.
- Сначала схема объекта по умолчанию для текущего пользователя проверяется на предмет требуемого имени.
- Если это не удается, схема
dbo
(«владелец базы данных») исследуется для объекта с желаемым именем.
Для хранимых процедур, что поиск является более сложным:
- Probe текущего пользователя схема по умолчанию в текущей базе данных.
- Проверьте схему 'dbo' в текущей базе данных.
Если имя хранимой процедуры начинается с «sp_»,
- Probe текущего пользователя схема по умолчанию в базе данных «мастер».
- Проверьте схему 'dbo' в базе данных 'master'.
Если объект, о котором идет речь, относится к другой схеме, он не будет найден, если не будет квалифицирован по схеме владельца.
Из-за проблемы с множественным поиском отсутствие квалификации схемы может предотвратить кэширование плана выполнения, что означает, что план запроса должен быть перекомпилирован при каждом выполнении запроса. Излишне говорить, что это ... субоптимальное воздействие на производительность.
Кроме того, вы можете получить ... интересные ... результаты, если ваш пользователь базы данных является «dev» и соответствующий разработчик, спустя 6 месяцев назад, создал таблицу или другой объект с именем «dev.foo» во время разработки. Теперь вы живете в производстве и подключаетесь как пользовательский «dev». Выполнение select * from foo
будет привязано к dev.foo
вместо фактической производственной таблицы, созданной DBA, «dbo.foo». Ваши пользователи будут задаваться вопросом, почему их данные отсутствуют, или вы будете разорвать свои волосы, задаваясь вопросом, почему приложение скулит по поводу отсутствия столбцов, когда они, кажется, все там, когда вы смотрите на него через SQL Management Studio.
работы пользователя (например, идентификатор, заданный для пула приложений на веб-сайте), есть доступ к базе данных? –
Невозможно ответить, не видя схему базы данных. Однако это возможности для изучения: 1) Хранится ли tblEmployees в схеме, отличной от «dbo»? 2) Если вы скопируете SQL в SQL Management express (или любой выполняемый запрос), есть ли у вас какие-либо проблемы? 3) Вы уверены, что подключаетесь к правильной базе данных? 4) Разве таблица базы данных не имеет множественности? –
Правильная база данных, да.И когда я пытаюсь «INSERT INTO», он говорит ту же ошибку. Но я могу добавлять записи вручную, когда открываю таблицу ... – user2971155