Tengo una tabla de base de datos con la que intento actualizar/INSERTAR con un procedimiento almacenado. Vamos a definir la tabla de este modo:Procedimiento almacenado NULL Parámetro
CREATE TABLE Foo
(
Id INT IDENTITY(1, 1),
Name VARCHAR(256) NOT NULL,
ShortName VARCHAR(32),
Sort INT
);
He escrito un procedimiento almacenado similar al siguiente:
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;
he simplificado en gran medida las estructuras de datos que trato pero espero que esto sirva mi punto. Mi pregunta es sobre cómo se procesan los parámetros. ¿Hay alguna manera de determinar dentro del procedimiento si @Sort se pasó como NULL o se estableció NULL con la declaración predeterminada en la lista de parámetros?
EDIT:
El propósito de esto es que no quiero parámetros NULL para anular cualquier columna en la instrucción UPDATE a menos que explícitamente se pasan de esa manera.
¿Por qué no haces que las columnas no tengan valores predeterminados? –