web-dev-qa-db-fra.com

Exécution de la fonction définie par l'utilisateur SQL qui renvoie une clause booléenne, dans où

J'espère que cela ne semble pas trop simple. J'ai regardé cela, mais je ne suis pas si bon en fonctions définies par l'utilisateur SQL et leur utilisation, donc je ne suis pas sûr de ce qui se passe. Qui a envie de quelques points pour me dire pourquoi je reçois l'erreur:

Expression de type non booléen spécifiée dans un contexte où une condition est attendue, près de ')'.

Pour ça:

UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')

où la fonction peut être créée en utilisant:

-- ***this will also find NULL and empty string values***
CREATE FUNCTION LMI_IsSingleCharacterRepeated (@string varchar(max), @char char(1))
RETURNS bit
AS 
BEGIN
    DECLARE @index int
    DECLARE @len int
    DECLARE @currentChar char(1)
    SET @index = 1
    SET @len= LEN(@string)

    WHILE @index <= @len
    BEGIN
        SET @currentChar = SUBSTRING(@string, @index, 1)
        IF @currentChar = @char
            SET @index= @index+ 1
        ELSE
            RETURN 0
    END
    RETURN 1
END;
GO

Cette fonction sert à vérifier si une chaîne est un caractère unique spécifié, répété. J'espère que quelqu'un le trouvera utile!

20
Chris Halcrow

Vous devez utiliser des opérateurs de comparaison avec des fonctions même si le type de retour est bit.

UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
22
Thomas

Vous devez modifier la clause where de votre requête comme suit:

UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
4
nikhil pinto

Essaye ça

CREATE FUNCTION LMI_IsSingleCharacterRepeated (@str varchar(max), @char char(1))
RETURNS BIT
AS 
BEGIN
    DECLARE @indx int
    DECLARE @len int
    DECLARE @currentChar char(1)
    SET @indx = 1
    SET @len= LEN(@str)

    WHILE @indx <= @len
    BEGIN
        SET @currentChar = SUBSTRING(@str, @indx, 1)
        IF @currentChar = @char
            SET @indx= @indx+ 1
        ELSE
            RETURN 0
    END
    RETURN 1
END;
GO
4
Ravi