簡體   English   中英

存儲過程中的 T-SQL Null 比較

[英]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

如果這下一個不起作用@phoneExtensionNULL ,並在記錄PhoneNumbers表有NULLPhoneExtenstion

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)

@phoneExtensionNULL ,這個過濾條件基本上會被忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM