[英]T-SQL Null comparisons in stored procedure
我在 SQL Server 中的存儲過程有一個小問題。 我正在嘗試選擇一個電話號碼來獲取其Id
,但是我遇到了定義為int
並允許空值的PhoneExtension
列的問題。
以下代碼有效,但可能不會返回所需的結果(可能存在多個分機號相同的電話號碼)
CREATE PROCEDURE [dbo].[GetPhoneNumberId]
@phoneNumber INT,
@phoneExtension INT = NULL,
@countryCode INT = 1,
@PhoneNumberId INT OUTPUT
AS
BEGIN
SET @PhoneNumberId = (SELECT TOP 1 PhoneNumberId
FROM PhoneNumbers
WHERE PhoneNumber = @phoneNumber
AND PhoneCountryCode = @countryCode);
END
如果這下一個不起作用@phoneExtension
是NULL
,並在記錄PhoneNumbers
表有NULL
的PhoneExtenstion
CREATE PROCEDURE [dbo].[GetPhoneNumberId]
@phoneNumber INT,
@phoneExtension INT = NULL,
@countryCode INT = 1,
@PhoneNumberId INT OUTPUT
AS
BEGIN
SET @PhoneNumberId = (SELECT TOP 1 PhoneNumberId
FROM PhoneNumbers
WHERE PhoneNumber = @phoneNumber
AND PhoneExtension = @phoneExtension
AND PhoneCountryCode = @countryCode);
END
你可以試試這個:
CREATE PROCEDURE [dbo].[GetPhoneNumberId]
@phoneNumber INT,
@phoneExtension INT = NULL,
@countryCode INT = 1,
@PhoneNumberId INT OUTPUT
AS
BEGIN
SET @PhoneNumberId = (SELECT TOP 1 PhoneNumberId
FROM PhoneNumbers
WHERE PhoneNumber = @phoneNumber
AND (ISNULL(PhoneExtension, '') = ISNULL(@phoneExtension, ''))
AND PhoneCountryCode = @countryCode);
END
你可以試試這個:
CREATE PROCEDURE [dbo].[GetPhoneNumberId]
@phoneNumber INT,
@phoneExtension INT = NULL,
@countryCode INT = 1,
@PhoneNumberId INT OUTPUT
AS
BEGIN
SET @PhoneNumberId = (SELECT TOP 1 PhoneNumberId
FROM PhoneNumbers
WHERE PhoneNumber = @phoneNumber
AND (
PhoneExtension = @phoneExtension
OR
(PhoneExtension IS NULL AND @phoneExtension IS NULL)
)
AND PhoneCountryCode = @countryCode);
END
改變
PhoneExtension = @phoneExtension
進入
PhoneExtension = ISNULL(@phoneExtension, PhoneExtension)
當@phoneExtension
為NULL
,這個過濾條件基本上會被忽略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.