我有一个数据库表我试图做一个UPDATE/INSERT与存储过程。让我们来定义,像这样的表:存储过程NULL参数
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语句,除非它们被以这种方式明确传递。
为什么不让列没有默认值? – 2011-03-07 21:22:06