Bạn đã thử chạy lại nó chưa? Tôi nghi ngờ lệnh gọi thực thi là một phần của quy trình của bạn bây giờ. Làm thế nào về:
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%';
Một loạt các đề xuất khác mà tôi không muốn đề cập đến:
- Bạn phải luôn chỉ định tiền tố lược đồ khi tạo và gọi các đối tượng. Vì vậy,
CREATE PROCEDURE dbo.wildcard_name
,EXEC dbo.wildcard_name
, v.v. - Hy vọng rằng mã sản xuất của bạn không sử dụng
SELECT *
. - Thực sự khuyên bạn nên sử dụng nvarchar thay vì nchar cho tham số của bạn.
- Bao bọc phần thân thủ tục của bạn bằng
BEGIN
/END
và đừng ngại sử dụng cách thụt lề để làm cho nó dễ đọc hơn nhiều. - Thông thường, bạn sẽ muốn sử dụng
SET NOCOUNT ON;
để ngănn row(s) affected
thông báo can thiệp vào kết quả của bạn. -
NVARCHAR
các tham số phải có tiền tố N (mặc dù tôi không hiểu tại sao bạn lại xen kẽ giữavarchar
vànchar
ngay từ đầu - đây là hai sự thay đổi mà tôi mong đợi bằng không). - Tùy thuộc vào đối chiếu (và liệu bạn có muốn tìm kiếm phân biệt chữ hoa chữ thường hay không), bạn có thể cần thay đổi mệnh đề where bằng cách sử dụng
COLLATE
mệnh đề.
CHỈNH SỬA điều này dường như hoạt động tốt đối với tôi, vì vậy vui lòng giải thích những gì bạn đang làm khác đi (và "không hoạt động" vẫn có nghĩa là kết quả trống hay điều gì khác?):