sql >> Databáze >  >> RDS >> Sqlserver

Nelze spustit uloženou proceduru SQL Server

Nemusíte používat dynamické T-SQL prohlášení v tomto případě. Jedním ze způsobů je použít něco takového:

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

Cílem je filtrovat podle @CategoriesIdString pokud je NOT NULL pomocí LEFT JOIN .




  1. java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver:Načítám správný ovladač?

  2. Cizí klíč odkazující na více řádků v jiné tabulce

  3. Úloha skriptu SSIS C# 2012 odkazující na WinSCPnet.dll selže, když cíl vyvolání vyvolá spuštění z SQL Server Agent s výjimkou

  4. Je špatné použít WITH PERMISSION_SET =UNSAFE pro sestavení v SQL 2005?