如何在Coalesce中设置NULL

时间:2016-09-16 08:17:56

标签: sql sql-server

关于Coalesce的快速提问:

clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent)

让我们说专栏' ClawbackPercent'我的值为100.

如果我执行一个proc并将参数@ClawbackPercent设置为NULL值,它会将值保留在该列的行中,这很好。

但是,如果我想将100设置为实际为NULL,我需要在exec proc语句中编写什么或者我需要在Coalesce语句中添加什么?

谢谢

3 个答案:

答案 0 :(得分:1)

听起来您希望100成为存储过程参数的默认值,而不一定要用此值替换所有NULL。如果是这种情况,您不需要COALESCE,但您需要在proc定义上为参数提供默认值。

e.g。

CREATE PROC dbo.MyProc (
@MyParam INT = 100
)
AS
-- My code here

如果有人在没有为@MyParam指定值的情况下执行此proc,则将分配默认值100。如果他们明确指定@MyParam = NULL,那么将分配NULL ..

答案 1 :(得分:1)

那么您可能不应该使用coalesce,而是可以使用case语句,如下所示:

clw.ClawbackPercent = CASE WHEN @ClawbackPercent = 100 
                               THEN NULL 
                           ELSE 
                               @ClawbackPercent END
选择语句中的

答案 2 :(得分:0)

您必须按以下方式撰写:

CREATE PROCEDURE sp_test(
    @ClawbackPercent VARCHAR(30)
) AS 
BEGIN
    SELECT COALESCE(@ClawbackPercent, '100')
END

- 如下所示调用,如果要返回第二个值,则EXEC sp_test NULL

- 如果您的第二个,第三个......参数在INTEGER中,那么只需CAST到VARCHAR

EXEC sp_test 'NULL'