Saya telah membuat tabel testtable
di dalam database testbase
yang memiliki struktur berikut:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
yang saya gunakan Microsoft SQL Server 2008 Management Studio.
Saya membuat prosedur tersimpan testtable_pricesmaller
sebagai berikut
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
dan dapat melihat Prosedur Tersimpan di Object Explorer
dari Microsoft SQL Server Management Studio. (Terdaftar dalam struktur pohon berikut Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Saya merasa sangat aneh ketika saya menerima kesalahan berikut:
Could not find the stored procedure 'dbo.testtable_pricesmaller'.
ketika saya menjalankan pernyataan SQL berikut:
execute dbo.testtable_pricesmaller 50
Apa yang bisa hilang?
sql-server-2008
stored-procedures
ssms
Mendongkrak
sumber
sumber
USE
pernyataan tetapi itu memberi saya kesalahan.Jawaban:
IntelliSense Segarkan Cache lokal harus memperbaikinya
sumber
Anda tidak harus me-restart database setelah menambahkan prosedur tersimpan yang baru, meskipun Anda perlu me-refresh objek Anda explorer untuk melihatnya di sana.
Lain kali Anda menambahkan prosedur yang tersimpan coba jalankan opsi klik kanan eksekusi dari objek explorer dan masukkan parameter Anda dan lihat apakah itu berjalan. Jika tidak berjalan maka saya tidak yakin apa masalah Anda. Jika tidak berjalan maka itu bisa menjadi sesuatu yang sederhana seperti SQL sedang mencoba untuk query dari database yang salah.
sumber
Akhirnya saya tahu mengapa pesan itu muncul di MS SQL Server Management Studio.
MS SQL Server Management Studio memerlukannya untuk memulai kembali setelah membuat prosedur tersimpan di dalamnya.
Setelah memulai kembali MS SQL Server Management Studio, tidak ada kesalahan seperti itu lagi.
(Aneh, apakah itu berarti bahwa setiap kali saya membuat prosedur tersimpan, saya harus memulai ulang?)
sumber
Perintah create Anda seharusnya
Anda hilang
dbo.
sebelum nama prosedur. Setiap kali Anda membuat prosedur, praktik yang baik untuk secara eksplisit menentukan pengguna / skema dengan nama prosedur yaitu nama prosedur harus memiliki tanda tangan yang memenuhi syarat.Saya harap ini akan membantu Anda.
sumber
Dalam SQL Server 2008, ketika login di bawah akun Windows, jika Anda tidak memiliki tingkat keamanan SYSADMIN, ketika Anda membuat objek tanpa secara eksplisit menentukan skema, itu mungkin / akan membuatnya di bawah [DOMAIN \ nama pengguna]. [ObjectName ] bukan [dbo]. [ObjectName] (itu diperbaiki di SQL Server 2012 saya pikir).
Saya memiliki masalah ini terjadi pada saya ketika saya mengurangi tingkat keamanan pengguna, dan salah satu prosedur yang dia jalankan adalah menjatuhkan dan membuat ulang tabel tanpa skema, sehingga prosedur lainnya mogok karena tidak dapat mengakses objek lagi . Ternyata tabel itu sekarang dibuat dengan nama pengguna domainnya.
Berikut adalah pos Microsoft tentang perilaku ini:
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (lihat bagian "Skema Tersirat dan Penciptaan Pengguna")
Tabel tidak dibuat di bawah skema dbo
SQL 2008 R2 membuat pengguna / skema ketika pengguna Windows membuat tabel
Jadi, singkatnya, Anda mungkin memiliki masalah basis data (Anda membuat tabel dalam basis data tetapi mencoba mengaksesnya dari basis data lain) atau Anda memiliki masalah seperti yang baru saja saya jelaskan.
sumber
Saya tahu ini sudah tua; Saya menemukan pertanyaan ini ketika saya sedang mencari solusi untuk masalah yang sama ini, dan saya memposting jawaban ini dengan harapan dapat membantu orang lain yang juga menemukan pertanyaan ini.
Dalam kasus saya, saya mendapat pesan kesalahan saat menjalankan laporan SSR menggunakan sumber data bersama. Sumber data bersama ini tidak menentukan database default (Katalog Default = parameter), dan saya tidak bisa menambahkannya ke string koneksi karena saya tidak memiliki kata sandi (dan ketika Anda mengubah sesuatu di sumber data SSRS cenderung ingin Anda memasukkan kembali kata sandi).
Untuk mengatasi ini, saya mengubah database default untuk login dalam contoh SQL Server dari master ke database yang berisi prosedur tersimpan yang ingin dieksekusi oleh laporan.
Saat menjalankan sesuatu dari SSMS, perlu diingat panel Object Explorer adalah satu koneksi sedangkan editor apa pun yang Anda miliki adalah koneksi yang sama sekali berbeda. Jadi Anda mungkin melihat objek untuk SQL01 di Object Explorer, tetapi kode yang Anda jalankan di editor akan berjalan terhadap SQL02 - Saya telah mengalami masalah ini beberapa kali selama bertahun-tahun dan setelah banyak memaki dan "Mengapa tidak akan ini bekerja? " menyadari kesalahan saya. Untuk editor, lihat di sudut kanan bawah untuk melihat instance dan database yang terhubung dengan Anda.
sumber
TL; DR: Anda mungkin memiliki prosedur tersimpan yang memanggil prosedur tersimpan lain yang tidak ada.
Saya punya masalah ini dan menemukan perbaikan. Inilah yang terjadi. Saya membuat satu prosedur tersimpan:
Saya kemudian membuat prosedur tersimpan lain yang menjalankan yang pertama
Beberapa waktu kemudian, saya berganti nama
dbo.MyProc
menjadidbo.MyProc2
. Setelah mengganti nama, ketika saya mencoba menelepondbo.MyProcCaller
, saya akan menerima pesan kesalahan ini:Solusi saya adalah mengubah prosedur tersimpan kedua saya untuk menggunakan nama baru:
Berikut cara mudah untuk memeriksa apakah Anda memiliki masalah ini. Klik untuk memodifikasi teks dari prosedur tersimpan dan kemudian jalankan teks itu. Jika Anda mendapat peringatan seperti ini, Anda perlu mengganti nama prosedur tersimpan Anda:
sumber
Pertanyaan ini sudah berumur beberapa tahun, tetapi saya hanya ingin memberikan kemungkinan lain bagi orang seperti saya yang menemukannya nanti.
Saya menjalankan perintah ini: EXEC SP_CONFIGURE 'Agent XPs'
Dan kesalahan dijelaskan: Msg 2812, Level 16, State 62, Line 1 Tidak dapat menemukan prosedur tersimpan 'SP_CONFIGURE'.
Tetapi kemudian saya ingat bahwa server ini diatur untuk peka terhadap huruf besar-kecil. Jadi perintah ini bekerja dengan baik: EXEC sp_configure 'Agent XPs'
HTH
sumber