关于Coalesce的快速提问:
clw.ClawbackPercent = Coalesce(@ClawbackPercent, clw.ClawbackPercent)
让我们说专栏' ClawbackPercent'我的值为100.
如果我执行一个proc并将参数@ClawbackPercent设置为NULL值,它会将值保留在该列的行中,这很好。
但是,如果我想将100设置为实际为NULL,我需要在exec proc语句中编写什么或者我需要在Coalesce语句中添加什么?
谢谢
答案 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'