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!
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
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
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