Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在合并中设置NULL_Sql_Sql Server - Fatal编程技术网

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'