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

Làm thế nào để phân tích cú pháp một VARCHAR được chuyển đến một thủ tục được lưu trữ trong SQL Server?

Nếu có thể, không sử dụng varchar cho những việc này, hãy sử dụng bảng tham số có giá trị thay vào đó.

Để sử dụng tham số giá trị được lập bảng, trước tiên bạn nên khai báo loại bảng do người dùng xác định:

CREATE TYPE IntList As Table
(
    IntValue int
)

Sau đó, thay đổi thủ tục đã lưu trữ của bạn để chấp nhận biến này thay vì nvarchar:

create proc Sp_ReturnPrdoucts
    @BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN

SELECT * 
FROM tbl_Products as p 
join tbl_Brands b on p.ProductBrandId=b.BrandId 
join @BrandIds ON(b.BrandId = IntValue)

END

Vấn đề là IN() toán tử mong đợi một danh sách các biến được phân tách bằng dấu phẩy, trong khi bạn cung cấp một biến duy nhất mà giá trị của nó là một chuỗi được phân tách bằng dấu phẩy.

Nếu bạn không thể sử dụng một tham số có giá trị bảng, bạn có thể sử dụng một hàm nối chuỗi trong sql để chuyển đổi giá trị của varchar thành một bảng ints. có rất nhiều công cụ phân tách ngoài kia, tôi khuyên bạn nên đọc bài viết này trước khi chọn một.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động tạo giá trị phân cấp

  2. Cài đặt từng bước SQL Server 2017 -2

  3. Thực hiện lệnh Chèn và trả về Id đã chèn trong Sql

  4. Tạo một kiểu tổng quát để sử dụng làm tham số giá trị bảng

  5. Làm cách nào để xoay quanh các thuộc tính của cột XML trong T-SQL