t-sql:根据可选参数返回1行或所有内容

时间:2014-11-24 07:46:19

标签: tsql sql-update optional-parameters

我有一个存储过程,它接受一个可选参数。如果参数存在,则应更新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

1 个答案:

答案 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