这是在 SQL Server 2008 R2 中。
我用这个拉头发。请密切关注。
当我运行它时,我得到 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())))
)
但是,当我运行这个,“ORing”这两个条件时,我得到一个错误:
将 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