これはSQLServer2008R2にあります。
これで髪を引っ張っています。よく従ってください。
これを実行すると、27行が返されます。
select *
from dbo.[12STD_NO_VISIT]
where (
(dbo.fPhoneExists(PhoneNumber1) = 1
AND (NextCall1 BETWEEN GETDATE() AND DATEADD(hh, 1, GETDATE())))
)
これを実行すると、21行が返されます(PhoneNumber2とNextCall2への変更に注意してください)。
select *
from dbo.[12STD_NO_VISIT]
where (
(dbo.fPhoneExists(PhoneNumber2) = 1
AND (NextCall2 BETWEEN GETDATE() AND DATEADD(hh, 1, GETDATE())))
)
しかし、これを実行すると、2つの条件を「OR」すると、エラーが発生します。
varchar値'N'をデータ型intに変換するときに変換に失敗しました
select *
from dbo.[12STD_NO_VISIT]
where (
(dbo.fPhoneExists(PhoneNumber1) = 1
AND (NextCall1 BETWEEN GETDATE() AND DATEADD(hh, 1, GETDATE())))
OR
(dbo.fPhoneExists(PhoneNumber2) = 1
AND (NextCall2 BETWEEN GETDATE() AND DATEADD(hh, 1, GETDATE())))
)
しかし、それは私にエラーを与えるだけではありません。最初に42行を取得し、それを一瞬表示し([結果]タブ)、次にエラーを表示します([メッセージ]タブ)。
私はこれを理解することはできません。どんな助けでも大歓迎です。
ありがとう!
FUNCTION [dbo].[fPhoneExists](@PhoneNumber varchar)
RETURNS BIT
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @GoodNumber bit
IF (@PhoneNumber is NULL or @PhoneNumber = 0 or @PhoneNumber = '')
SET @GoodNumber = 0;
ELSE
SET @GoodNumber = 1;
Return(@GoodNumber);
END