これが簡単すぎるようには思えません。私はこれを調べましたが、SQLのユーザー定義関数とその使用があまり得意ではないので、何が起こっているのかわかりません。エラーが発生する理由を教えてくれると思う人はいますか?
')'の近くの、条件が予想されるコンテキストで指定された非ブール型の式。
このため:
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')
ここで、関数は次を使用して作成できます。
-- ***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
この関数は、文字列が指定された単一の文字であるかどうかを繰り返し確認するためのものです。誰かがそれが便利だと思うことを願っています!
戻り値の型がbit
であっても、関数に対して比較演算子を使用する必要があります。
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
クエリのwhere句を次のように変更する必要があります。
UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0') = 1
これを試して
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