rpf*_*pf3 6 sql null stored-procedures optional-parameters
我有一个数据库表我试图用存储过程进行UPDATE/INSERT.让我们像这样定义表:
CREATE TABLE Foo
(
Id INT IDENTITY(1, 1),
Name VARCHAR(256) NOT NULL,
ShortName VARCHAR(32),
Sort INT
);
Run Code Online (Sandbox Code Playgroud)
我写了一个类似于以下的存储过程:
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;
Run Code Online (Sandbox Code Playgroud)
我已经大大简化了我正在处理的数据结构,但我希望这符合我的观点.我的问题是如何处理参数.有没有办法在程序中确定@Sort是否通过参数列表中的默认声明传入为NULL或设置为NULL?
编辑:
这样做的目的是我不希望NULL参数覆盖UPDATE语句中的任何列,除非它们以这种方式显式传递.
小智 6
不,你无法检测@Sort如何变为NULL.如果您的目标是捕获何时显式设置而不是默认值设置,我建议使用不同的默认值(可能是通常不会使用的默认值,如-1).然后您可以假设如果@Sort为NULL,则显式传入,但如果为-1,则表示默认设置为@.
| 归档时间: |
|
| 查看次数: |
50542 次 |
| 最近记录: |