Apakah Anda mencoba menjalankannya lagi? Saya menduga panggilan exec adalah bagian dari tubuh prosedur Anda sekarang. Bagaimana dengan:
ALTER PROCEDURE dbo.wildcard_name
@userName NVARCHAR(8) = '%'
AS
BEGIN
SET NOCOUNT ON;
SELECT userId, userName
FROM dbo.user
WHERE userName LIKE @userName;
END
GO -- <-- this is important! It tells SSMS that your procedure has ended!
EXEC dbo.wildcard_name N'n%';
Banyak saran lain yang tidak akan saya sebutkan:
- Anda harus selalu menentukan awalan skema saat membuat dan memanggil objek. Jadi
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
, dll. - Semoga kode produksi Anda tidak menggunakan
SELECT *
. - Sangat disarankan menggunakan nvarchar daripada nchar untuk parameter Anda.
- Bungkus badan prosedur Anda dengan
BEGIN
/END
dan jangan takut untuk menggunakan indentasi agar lebih mudah dibaca. - Biasanya Anda ingin menggunakan
SET NOCOUNT ON;
untuk mencegahn row(s) affected
pesan agar tidak mengganggu hasil Anda. NVARCHAR
parameter harus memiliki awalan N (meskipun saya bingung mengapa Anda berganti-ganti antaravarchar
dannchar
pertama-tama - ini adalah dua shift yang saya harapkan nol).- Tergantung pada susunannya (dan apakah Anda ingin penelusuran peka huruf besar/kecil), Anda mungkin perlu mengubah klausa where menggunakan
COLLATE
klausa.
EDIT ini tampaknya berfungsi dengan baik untuk saya, jadi tolong jelaskan apa yang Anda lakukan secara berbeda (dan apakah "tidak berhasil" masih berarti hasil kosong, atau yang lainnya?):