Я создал таблицу testtable
в базе данных, testbase
которая имеет следующую структуру:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
который я использовал Microsoft SQL Server 2008 Management Studio.
Я создал хранимую процедуру testtable_pricesmaller
следующим образом
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
и могут просматривать хранимые процедуры в Object Explorer
Microsoft SQL Server Management Studio. (Он указан в следующей древовидной структуре Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Я нахожу это очень странным, когда я получаю следующую ошибку:
Could not find the stored procedure 'dbo.testtable_pricesmaller'.
когда я выполняю следующую инструкцию SQL:
execute dbo.testtable_pricesmaller 50
Чего не хватает?
USE
заявление, но оно дает мне ошибку.Ответы:
IntelliSense Обновить локальный кеш должен исправить это
источник
Вам не нужно перезагружать базу данных после добавления новой хранимой процедуры, хотя вам потребуется обновить обозреватель объектов, чтобы увидеть ее там.
В следующий раз, когда вы добавите хранимую процедуру, попробуйте запустить опцию выполнения правой кнопкой мыши из проводника объектов, введите параметры и посмотрите, будет ли она запущена. Если он не запускается, то я не уверен, в чем ваша проблема. Если он работает, то это может быть что-то простое, например, SQL пытается выполнить запрос из неверной базы данных.
источник
Наконец-то я знаю, почему сообщение появляется в MS SQL Server Management Studio.
Для MS SQL Server Management Studio требуется перезапустить его после создания в нем хранимой процедуры.
После перезапуска MS SQL Server Management Studio такой ошибки больше нет.
(Странно, значит ли это, что каждый раз, когда я создаю хранимую процедуру, мне приходится ее перезапускать?)
источник
Ваша команда создания должна быть
Вы отсутствуете
dbo.
перед названием процедуры. Всякий раз, когда вы создаете процедуру, хорошей практикой является явное определение пользователя / схемы с именем процедуры, то есть имя процедуры должно иметь полностью определенные подписи.Я надеюсь, что это поможет вам.
источник
В SQL Server 2008, когда вы вошли в систему под учетной записью Windows, если у вас нет уровня безопасности SYSADMIN, когда вы создаете объект без явного указания схемы, он может / создаст его под [DOMAIN \ username]. [ObjectName ] вместо [dbo]. [ObjectName] (это было исправлено в SQL Server 2012, я думаю).
Эта проблема возникала у меня, когда я снижал уровень безопасности пользователя, и одна из процедур, которые он выполнял, - удаление и воссоздание таблиц без схемы, поэтому остальная часть процедуры вылетала, потому что она не могла снова получить доступ к объекту. , Оказывается, таблицы теперь были созданы под его именем пользователя домена.
Вот сообщение Microsoft об этом поведении:
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (см. раздел «Неявная схема и создание пользователя»)
Таблица не создается в схеме dbo
SQL 2008 R2 создает пользователя / схему, когда пользователь Windows создает таблицы
Итак, короче говоря, у вас, вероятно, либо проблема с базой данных (вы создаете свою таблицу в базе данных, но пытаетесь получить к ней доступ из другой), либо у вас проблема, как я только что описал.
источник
Я знаю, что это старо; Я сталкивался с этим вопросом, когда искал решение этой же проблемы, и публикую этот ответ в надежде, что он поможет другим, кто также найдет этот вопрос.
В моем случае я получил сообщение об ошибке при выполнении отчета SSRS с использованием общего источника данных. В этом общем источнике данных не указана база данных по умолчанию (параметр Default Catalog =), и я не смог добавить ее в строку подключения, потому что у меня нет пароля (и когда вы что-то меняете в источнике данных SSRS, это имеет тенденцию чтобы вы хотели повторно ввести пароль).
Чтобы решить эту проблему, я изменил базу данных по умолчанию для имени входа в экземпляре SQL Server с главной на базу данных, содержащую хранимую процедуру, которую хотел выполнить отчет.
При запуске вещей из SSMS, имейте в виду, что панель Object Explorer - это одно соединение, а у любого редактора - совершенно другое соединение. Таким образом, вы можете видеть объекты для SQL01 в Object Explorer, но код, который вы запускаете в редакторе, будет работать против SQL02 - я сталкивался с этой проблемой несколько раз за эти годы и после долгих разговоров и «Почему бы не это работает? понял мою ошибку. Для редактора, посмотрите в правом нижнем углу, чтобы увидеть, к какому экземпляру и базе данных вы подключены.
источник
TL; DR: у вас может быть хранимая процедура, которая вызывает другую хранимую процедуру, которая не существует.
У меня была эта проблема, и я нашел решение. Вот что случилось. Я создал одну хранимую процедуру:
Затем я создал еще одну хранимую процедуру, которая выполнила первую
Через некоторое время я переименовал
dbo.MyProc
вdbo.MyProc2
. После переименования, когда я попытался позвонитьdbo.MyProcCaller
, я получил это сообщение об ошибке:Мое решение состояло в том, чтобы изменить мою вторую хранимую процедуру, чтобы использовать новое имя:
Вот простой способ проверить, есть ли у вас эта проблема. Нажмите, чтобы изменить текст хранимой процедуры и затем выполнить этот текст. Если вы получили такое предупреждение, вам нужно переименовать хранимую процедуру:
источник
Этому вопросу уже несколько лет, но я просто хочу дать еще одну возможность для тех, кто, как я, нашел его позже.
Я выполнил эту команду: EXEC SP_CONFIGURE 'Агент XP'
И получил описанную ошибку: Msg 2812, уровень 16, состояние 62, строка 1 Не удалось найти хранимую процедуру 'SP_CONFIGURE'.
Но потом я вспомнил, что этот сервер настроен с учетом регистра. Так что эта команда работала просто отлично: EXEC sp_configure 'Agent XPs'
НТН
источник