Sql 如何在合并中设置NULL
关于合并的快速问题:Sql 如何在合并中设置NULL,sql,sql-server,Sql,Sql Server,关于合并的快速问题: clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent) 比如说,对于“ClawbackPercent”列,我的值为100 如果我执行一个proc并将参数@ClawbackPercent设置为NULL值,它会在该列的行中保留值100,这很好 但是,如果我想将100实际设置为NULL,那么我需要在exec proc语句中编写什么,或者需要在Coalesce语句中添加什么 谢谢听起来您希望100
clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent)
比如说,对于“ClawbackPercent”列,我的值为100
如果我执行一个proc并将参数@ClawbackPercent设置为NULL值,它会在该列的行中保留值100,这很好
但是,如果我想将100实际设置为NULL,那么我需要在exec proc语句中编写什么,或者需要在Coalesce语句中添加什么
谢谢听起来您希望100是存储过程参数的默认值,而不一定要用该值替换所有空值。如果是这种情况,则不需要合并,但需要在proc定义中为参数提供默认值 e、 g
如果有人在没有为@MyParam指定值的情况下执行此过程,则会指定默认值100。如果它们明确指定@MyParam=NULL,则将分配NULL。那么您可能不应该使用
coalesce
,而是可以使用case
语句,如下所示:
clw.ClawbackPercent = CASE WHEN @ClawbackPercent = 100
THEN NULL
ELSE
@ClawbackPercent END
在select语句中,必须按以下方式编写:
CREATE PROCEDURE sp_test(
@ClawbackPercent VARCHAR(30)
) AS
BEGIN
SELECT COALESCE(@ClawbackPercent, '100')
END
--按如下方式调用,如果要返回第二个值,请执行sp_test NULL
--如果你的第二,第三。。。参数是整数,然后简单地转换为VARCHAR
EXEC sp_test 'NULL'
然后跳过合并表达式。您能为各种场景设置
@ClawbackPercent
值、当前ClawbackPercent
列值和预期的ClawbackPercent
列值吗?目前听起来,您希望能够在两种不同的情况下将@ClawbackPercent
设置为NULL
,并让我们以某种方式编写一个以两种不同方式神奇运行的查询。因此,如果参数为NULL
,SP应该怎么做?保留以前的值还是替换它?我想你知道如何做到这两个。只有当两个参数都为null时,Coalesce才会返回null,否则它将返回非null的值。
EXEC sp_test 'NULL'