gpt4 book ai didi

sql - 存储过程 NULL 参数

转载 作者:行者123 更新时间:2023-12-04 14:05:55 25 4
gpt4 key购买 nike

我有一个数据库表,我正在尝试使用存储过程对其进行更新/插入。让我们像这样定义表:

CREATE TABLE Foo
(
Id INT IDENTITY(1, 1),
Name VARCHAR(256) NOT NULL,
ShortName VARCHAR(32),
Sort INT
);

我编写了一个类似于以下内容的存储过程:
CREATE PROCEDURE Put_Foo
(
@Id INT = NULL OUTPUT,
@Name VARCHAR(256),
@ShortName VARCHAR(32) = NULL,
@Sort INT = NULL
)
AS
BEGIN
SET NOCOUNT ON;

SELECT
@Id = F.Id
FROM
Foo AS F
WHERE
F.Name = @Name;

IF (@Id IS NOT NULL)
BEGIN
UPDATE
Foo
SET
ShortName = @ShortName,
Sort = @Sort
WHERE
Id = @Id;
END
ELSE
BEGIN
INSERT
INTO Foo
(
Name,
ShortName,
Sort
)
VALUES
(
@Name,
@ShortName
@Sort
);

SET @Id = SCOPE_IDENTITY();
END

RETURN;
END;

我已经大大简化了我正在处理的数据结构,但我希望这对我的观点有用。我的问题是关于如何处理参数。有没有办法在过程中确定@Sort 是作为 NULL 传入还是通过参数列表中的默认声明设置 NULL?

编辑:

这样做的目的是我不希望 NULL 参数覆盖 UPDATE 语句中的任何列,除非它们以这种方式显式传递。

最佳答案

不,您无法检测 @Sort 是如何变为 NULL 的。如果您的目标是在显式设置而不是默认设置时进行捕获,我建议使用不同的默认值(可能通常不会使用的默认值,例如 -1)。然后你可以假设如果@Sort 是NULL,它是显式传入的,但如果它是-1,你知道它是默认设置的。

关于sql - 存储过程 NULL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198657/

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