首页 > 解决方案 > 如何使用具有默认值的多个输入创建存储过程?

问题描述

我试图创建一个存储过程,它采用两个值,一个开始行值,一个结束行值。默认的开始应该是从选择视图返回的行的计数,结束是从开始的 60 个值。我遇到的问题是在没有传递参数的情况下使用参数声明这两个值,并进一步使用这些值。

我试过使用声明但没有运气。

CREATE PROCEDURE [dbo].[getRecords] 
    (@StartLoc INT = (SELECT COUNT(*) FROM [dbo].[dashboardview]),
     @EndLoc INT = @StartLoc - 60)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT         
        o.ID, o.Name, o.DateRan, s.Name AS Job, o.Start, o.[End],
        o.Status, o.Logs 
    FROM            
        dbo.output AS o
    LEFT OUTER JOIN 
        dbo.jobs AS j ON o.Job = j.ID
    LEFT OUTER JOIN 
        dbo.scripts AS s ON  j.Script = s.ID 
    WHERE 
        (o.DateRan < GETDATE()) 
        AND (ROW_NUMBER() >= @StartLoc And ROW_NUMBER()<= @EndLoc)
    ORDER BY 
        o.ID
END

我的目标是返回指定范围之间的记录数。

标签: sql-serverstored-procedures

解决方案


将默认值设置为 NULL,然后检查以设置值是否为 NULL:

CREATE PROCEDURE [dbo].[getRecords] 
  @StartLoc INT = NULL,
  @EndLoc INT = NULL
AS
BEGIN
  SET NOCOUNT ON;

  IF @StartLoc IS NULL 
    SET @StartLoc = (SELECT COUNT(*) FROM [dbo].[dashboardview]);

  IF @EndLoc IS NULL
    SET @EndLoc = @StartLoc - 60;

  ...

推荐阅读