Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

thủ tục được lưu trữ với các tham số ký tự đại diện

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ăn n 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ữa varcharnchar 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?):




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo tệp đầu ra csv từ quy trình được lưu trữ trong SQL Server

  2. Truy vấn SQL:Cần thứ tự theo số lượng, hầu hết phải ở trên cùng, phần còn lại theo sau

  3. Triển khai dự án SSIS (SQL Server 2012) bên ngoài mạng

  4. Cách tìm kiếm nhiều chuỗi hoặc ký tự trong một trường trong sql

  5. Nhận các điểm không gian trong bán kính bằng cách sử dụng NHibernate Spatial