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

Không thể thực thi quy trình được lưu trữ trên SQL Server

Bạn không cần sử dụng T-SQL động tuyên bố trong trường hợp này. Một trong những cách là sử dụng một cái gì đó như thế này:

DECLARE @TempXML XML = CONVERT(XML, '<t>' + REPLACE(@CategoriesIdString, ',', '</t><t>') + '</t>')

;WITH DataSource ([CategoryId]) AS
(
    SELECT T.c.value('.', 'VARCHAR(100)')
    FROM @TempXML.nodes('/t') AS T(c)
    WHERE LEN(T.c.value('.', 'VARCHAR(100)')) > 0
)
SELECT Item.Id
      ,Item.ModelId
      ,Item.ItemCode
      ,Item.CategoryId
      ,(SELECT TOP (1) Category.CategoryName FROM Category WHERE Category.Id = Item.CategoryId) AS CategoryName
FROM Item 
LEFT OUTER JOIN Category 
    ON Item.CategoryId = Category.Id
LEFT JOIN DataSource
    ON Item.CategoryId = DataSource.CategoryId
WHERE DataSource.CategoryId IS NOT NULL 
    OR @CategoriesIdString IS NULL

Ý tưởng là lọc theo @CategoriesIdString nếu nó là NOT NULL sử dụng LEFT JOIN .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự cố thông thạo NHibernate với Giá trị cột DATE của SQL Server 2008

  2. Sắp xếp lại và khử trùng lặp các cột SQL dựa trên dữ liệu cột

  3. Chuyển giá trị được phân tách bằng dấu phẩy từ .NET sang thủ tục được lưu trữ bằng cách sử dụng giá trị trong hàm IN SQL

  4. Giải mã kiểu chờ CXPACKET và CXCONSUMER trong SQL Server

  5. SQL Server 2005 chỉ khôi phục một lược đồ