Параметр NULL хранимой процедуры

У меня есть таблица базы данных, которую я пытаюсь выполнить UPDATE / INSERT с помощью хранимой процедуры. Давайте определим таблицу следующим образом:

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 с помощью объявления по умолчанию в списке параметров?

EDIT:

Цель этого состоит в том, что я не хочу, чтобы параметры NULL переопределяли какие-либо столбцы в UPDATE , если они явно не переданы таким образом.

6
задан rpf3 4 March 2011 в 20:15
поделиться