gpt4 book ai didi

sql - 空值列和不存在 T-sql

转载 作者:行者123 更新时间:2023-12-04 19:58:06 25 4
gpt4 key购买 nike

我正在尝试执行以下操作:

IF NOT EXISTS ( 
SELECT *
FROM [tbl_web_company]
WHERE [name] = @name
AND [address1] = @address1
AND [address2] = @address2
AND [city] = @city
AND [province_id] = @province_id
AND [postal_code] = @postalcode
AND [contact_phone] = @phone
AND [contact_fax] = @fax
AND [deleted] = dbo.pvd_fn_getDeletedDate(@id, @active))
BEGIN
SELECT 'update'
END
ELSE
BEGIN
SELECT 'no update'
END

我基本上是想查看是否有任何列发生了变化,但是当 @province_id 和 dbo.pvd_fn_getDeletedDate(@id, @active) 在数据库中为 NULL 并且都设置为 NULL 时,我遇到了问题。

省 ID 是一个 INT - 可为空

Deleted 是一个日期时间 - 可为空。

如果数据库中的记录对于这两个值都为 NULL,那么这将始终选择“更新”。这是错误的,因为 [province_id] 和 [deleted] 是 NULL。

在这种情况下如何处理 NULLS 有什么建议吗?

最佳答案

您可以使用 ISNULL() 函数设置默认值吗?

    SELECT  *   
FROM [tbl_web_company]
WHERE [name] = @name
AND [address1] = @address1
AND [address2] = @address2
AND [city] = @city
AND ISNULL([province_id],99999) = ISNULL(@province_id,99999)
AND [postal_code] = @postalcode
AND [contact_phone] = @phone
AND [contact_fax] = @fax
AND ISNULL([deleted], '1990-01-01') = ISNULL(dbo.pvd_fn_getDeletedDate(@id, @active), '1990-01-01')
BEGIN
SELECT 'update'
END
ELSE
BEGIN
SELECT 'no update'
END

使用 ISNULL() 会阻止优化器使用索引,所以通常我会建议不要这样做,但是这个查询的编写方式,如果它无论如何都使用索引,我会感到惊讶。

关于sql - 空值列和不存在 T-sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com