To jest dla sekcji testu jednostkowego, który piszę.

Próbuję powiedzieć pass, jeśli którykolwiek wiersz w kolumnie zawiera określony ciąg. Mówiąc słowami, to, czego chcę, to „jeśli liczba wierszy zawierających ściągacz jest większa od zera, to zda test”.

Mam coś podobnego do poniższego kodu, ale nie mówi, że należy zadeklarować myVariable. Co ja robię źle?

    DECLARE @myVariable BIT =
            (
                SELECT CASE
                           WHEN Count(Description) LIKE '%astring%' > 0
                                 THEN
                               1
                           ELSE
                               0
                       END
                FROM TABLE

SELECT @myVariable
1
PolarVortex8 3 kwiecień 2020, 00:00

3 odpowiedzi

Najlepsza odpowiedź

Myślę, że chcesz:

DECLARE @myVariable BIT =
        (SELECT (CASE WHEN Count(*) > 0 THEN 1 ELSE 0 END)
         FROM TABLE
         WHERE Description LIKE '%astring%' 
        );

Nie polecałbym do tego bit. SQL Server tak naprawdę nie obsługuje wartości logicznych. Liczby całkowite (lub nawet tinyint) są zwykle łatwiejsze w użyciu niż bit.

2
Gordon Linoff 2 kwiecień 2020, 21:01

Właśnie:

DECLARE @myVariable BIT = (
    SELECT MAX(CASE WHEN Description LIKE '%astring%' THEN 1 ELSE 0 END)
    FROM mytable
);

Spowoduje to ustawienie zmiennej na 1, jeśli co najmniej jeden wiersz w tabeli zawiera Description, które pasuje do wzorca.

1
GMB 2 kwiecień 2020, 21:02
DECLARE @myVariable BIT=
     (
      SELECT IIF(ISNULL(count(*),0)>0,1,0) 
      FROM TABLE
      WHERE EXISTS(SELECT * FROM TABLE WHERE Description LIKE '%astring%')
     )

SELECT @myVariable AS myVariable
0
Vahid Heydarinezhad 6 kwiecień 2020, 21:42