Jest to część jednej z moich procedury przechowywanej:Jak sprawdzić, czy zmienna tabeli jest pusta w SQL Server?
@dataInTable dbo.Table_Variable readonly,
....
AND (
(@dataInTable IS NULL)
OR
(item IN (SELECT T FROM @dataInTable))
)
@dataInTable IS NULL
jest złego w składni, błąd jest
Must declare the scalar variable "@dataInTable"
Więc go zmienić na:
(SELECT T FROM @dataInTable) IS NULL
to działa ale jeśli @dataInTable
ma więcej niż 1 pozycję, pojawia się błąd:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Zrozumiałe, więc go zmienić na:
(SELECT TOP(1) T FROM @ProgramRatings) IS NULL
działa doskonale, co mam obawy wydajność.
Zastanawiam się, czy nie ma łatwiejszego sposobu, aby sprawdzić, czy zmienna tabela jest pusta, jak
AND (
(@dataInTable IS EMPTY)
OR
(item IN (SELECT T FROM @dataInTable))
)
+1 "EXISTS" może być bardziej wydajny niż "COUNT", ponieważ zatrzymuje się po pierwszym rzędzie. –
Dzięki, próbowałem istnieć, ale nie można go używać w warunkach wyboru: AND ( (NIE MOGĘ MIEJSCE istnieć TUTAJ) LUB (pozycja IN (WYBIERZ T OD @dataInTable)) ). Czy znasz poprawną składnię? –
@ EricYin Prawdopodobnie szukasz "CASE", jeśli chcesz go użyć w "SELECT". Trudno powiedzieć, co robisz na podstawie fragmentów, które opublikowałeś do tej pory. –