我有一个存储过程,它接受一个可选参数。如果参数存在,则应更新1记录,否则更新其他所有记录。有没有办法在不使用动态SQL的情况下使用单个SQL语句?
这样的事情:
CREATE PROCEDURE UpdateEmployees (@PersonID varchar(10) = null)
AS
BEGIN
UPDATE Employees
SET Field1 = 'Changed'
WHERE (PersonID Is Not Null OR PersonID = ISNULL(@PersonID, '')) --this not 100% yet.
END
答案 0 :(得分:0)
您几乎就在那里 - 您需要使用提供的@PersonId
执行更新,或者如果参数 null
(如果不是,则为你现在有)。
此外,isnull
是多余的,因为null
将在任何true
操作中返回“unknown”(不是=
)。
CREATE PROCEDURE UpdateEmployees (@PersonID varchar(10) = null)
AS
BEGIN
UPDATE Employees
SET Field1 = 'Changed'
WHERE (@PersonID IS NULL OR PersonID = @PersonID)
END