Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można wykonać procedury składowanej SQL Server

Nie musisz używać dynamicznego T-SQL oświadczenie w tym przypadku. Jednym ze sposobów jest użycie czegoś takiego:

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

Pomysł polega na filtrowaniu według @CategoriesIdString parametr, jeśli jest NOT NULL za pomocą 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. Microsoft Sync Framework — wydajność i skalowalność

  2. Jak można iterować po wynikach procedury składowanej z poziomu innej procedury składowanej .... bez kursorów?

  3. Unikanie kursorów w celu aktualizacji wielu rekordów za pomocą wyzwalacza

  4. Błąd serwera SQL 213:Nazwa kolumny lub liczba podanych wartości nie jest zgodna z definicją tabeli.

  5. Jak wyświetlić wszystkie dotacje dla bazy danych SQL?